Mis on kõige tõhusam viis massiivi kopeerimiseks?
sobes.tech AI
Vastus AI-lt
Primitiivsete andmetüüpide ja lihtsate objektide pinnakopiamiseks on kõige tõhusamad järgmised viisid:
-
System.arraycopy(): Natiivne meetod, optimeeritud kiireks kopeerimiseks.// Näide kasutades System.arraycopy() int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = new int[sourceArray.length]; System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length); -
Arrays.copyOf(): Mugav meetodArraysklassist, mis kasutab sisemiseltSystem.arraycopy():// Näide kasutades Arrays.copyOf() int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
Sügava koopiana (kui on vaja kopeerida mitte ainult viiteid, vaid ka iseobjekte, millele need viitavad) võivad olla vajalikud teised meetodid, näiteks:
-
Cloneableliidese rakendamine jaclone()meetodi ülekirjutamine:// Näide, rakendades Cloneable ja `clone()` class MyObject implements Cloneable { int value; MyObject innerObject; @Override protected Object clone() throws CloneNotSupportedException { MyObject cloned = (MyObject) super.clone(); // sügav koopia sisemisele objektile cloned.innerObject = (MyObject) this.innerObject.clone(); return cloned; } } -
Koopia konstruktorite kasutamine:
// Näide koopia konstruktorist class MyObject { int value; MyObject innerObject; public MyObject(MyObject other) { this.value = other.value; // sügav koopia sisemisele objektile this.innerObject = new MyObject(other.innerObject); } } -
Seriaalimise/deserialiseerimise kasutamine (näiteks
ByteArrayInputStreamjaObjectInputStreamabil): Võib olla ebaefektiivne suurte massiivide või objektide puhul, mis ei rakendaSerializable. -
Kolmanda osapoole teekide kasutamine (näiteks Apache Commons Lang
SerializationUtils.clone()meetod):
Kõige tõhusam pinnakopiamiseks (pinnalise) primitiivsete tüüpide ja lihtsate objektide puhul on System.arraycopy() või Arrays.copyOf(). Sügava koopia jaoks on sageli eelistatav kasutada koopia konstruktorit.