Mi a leghatékonyabb módszer egy tömb másolására?
sobes.tech MI
Válasz az MI-től
Az alapvető típusok és mély másolat nélküli objektumok esetén a leghatékonyabb módszerek:
-
System.arraycopy(): natív módszer, amely optimalizált gyors másolásra.// Példa a System.arraycopy() használatára int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = new int[sourceArray.length]; System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length); -
Arrays.copyOf(): kényelmes módszer azArraysosztályból. Belsőleg aSystem.arraycopy()-t használja.// Példa az Arrays.copyOf() használatára int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
A mély másoláshoz (amikor nem csak a hivatkozásokat, hanem a hivatkozott objektumokat is másolni kell) más megközelítések lehetnek szükségesek, például:
-
A
Cloneableinterfész megvalósítása és aclone()metódus felülírása. Nem ajánlott új fejlesztésekhez, mivel számos problémát okozhat.// Cloneable és clone() példája class MyObject implements Cloneable { int value; MyObject innerObject; @Override protected Object clone() throws CloneNotSupportedException { MyObject cloned = (MyObject) super.clone(); // mély másolás a belső objektumról cloned.innerObject = (MyObject) this.innerObject.clone(); return cloned; } } -
Másoló konstruktor használata.
// Másoló konstruktor példája class MyObject { int value; MyObject innerObject; public MyObject(MyObject other) { this.value = other.value; // mély másolás a belső objektumról this.innerObject = new MyObject(other.innerObject); } } -
Szerializáció/deszerializáció használata (pl.
ByteArrayInputStreamésObjectInputStreamsegítségével). Hatékonytalan lehet nagy tömbök vagySerializable-t nem implementáló objektumok esetén. -
Külső könyvtárak használata (pl. Apache Commons Lang
SerializationUtils.clone()metódusával).
A leghatékonyabb módszer a felületi (lapos) másoláshoz primitív típusok és egyszerű objektumok esetén a System.arraycopy() vagy az Arrays.copyOf(). Mély másoláshoz gyakran a másoló konstruktor a preferált.