Aký je najefektívnejší spôsob kopírovania poľa?
sobes.tech AI
Odpoveď od AI
Pre primitívnych typov dát a objektov bez hlbokého kopírovania sú najúčinnejšie nasledujúce spôsoby:
-
System.arraycopy(): Nativná metóda, optimalizovaná na rýchle kopírovanie.// Príklad použitia 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(): Pohodlná metóda z triedyArrays. Vo vnútri používaSystem.arraycopy().// Príklad použitia Arrays.copyOf int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
Pre hlboké kopírovanie objektov (keď je potrebné skopírovať nielen odkazy, ale aj samotné objekty, na ktoré odkazujú) môžu byť potrebné iné prístupy, ako napríklad:
-
Implementácia rozhrania
Cloneablea prepísanie metódyclone(). Neodporúča sa pre nové vývoja kvôli mnohým problémom.// Príklad implementácie Cloneable a clone() class MyObject implements Cloneable { int value; MyObject innerObject; @Override protected Object clone() throws CloneNotSupportedException { MyObject cloned = (MyObject) super.clone(); // hlboké kopírovanie vnútorného objektu cloned.innerObject = (MyObject) this.innerObject.clone(); return cloned; } } -
Použitie konštruktora kopírovania.
// Príklad konštruktora kopírovania class MyObject { int value; MyObject innerObject; public MyObject(MyObject other) { this.value = other.value; // hlboké kopírovanie vnútorného objektu this.innerObject = new MyObject(other.innerObject); } } -
Použitie serializácie/deserializácie (napríklad pomocou
ByteArrayInputStreamaObjectInputStream). Môže byť neefektívne pre veľké polia alebo objekty, ktoré neimplementujúSerializable. -
Použitie tretích knižníc (napríklad Apache Commons Lang s metódou
SerializationUtils.clone()).
Najefektívnejším pre ploché (povrchové) kopírovanie primitívnych typov a jednoduchých objektov je System.arraycopy() alebo Arrays.copyOf(). Pre hlboké kopírovanie je často vhodnejší konštruktor kopírovania.