Kāda ir efektīvākā veids, kā kopēt masīvu?
sobes.tech AI
Atbilde no AI
Primitīvo tipu un vienkāršu objektu virspusējas (pārklājošās) kopēšanas efektīvākie veidi ir:
-
System.arraycopy(): Nativā metode, optimizēta ātrai kopēšanai.// Piemērs, izmantojot 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(): Ērta metode noArraysklases, kas iekšēji izmantoSystem.arraycopy().// Piemērs, izmantojot Arrays.copyOf int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
Dziļā kopēšana (kad nepieciešams kopēt ne tikai atsauces, bet arī pašus objektus, uz kuriem tie norāda) var prasīt citus paņēmienus, piemēram:
-
Cloneableinterfeisa īstenošana unclone()metodes pārdefinēšana:// Piemērs, īstenojot Cloneable un `clone()` class MyObject implements Cloneable { int value; MyObject innerObject; @Override protected Object clone() throws CloneNotSupportedException { MyObject cloned = (MyObject) super.clone(); // dziļa kopēšana iekšējā objekta cloned.innerObject = (MyObject) this.innerObject.clone(); return cloned; } } -
Kopijas konstruktora izmantošana:
// Piemērs, kopijas konstruktors class MyObject { int value; MyObject innerObject; public MyObject(MyObject other) { this.value = other.value; // dziļa kopēšana iekšējā objekta this.innerObject = new MyObject(other.innerObject); } } -
Serijalizācijas/deserializācijas izmantošana (piemēram, ar
ByteArrayInputStreamunObjectInputStream): Var būt neefektīvi lieliem masīviem vai objektiem, kas neīstenoSerializable. -
Trešo pušu bibliotēku izmantošana (piemēram, Apache Commons Lang
SerializationUtils.clone()metodi):
Efektīvākā ir virsmas (pārklājošās) kopēšana ar System.arraycopy() vai Arrays.copyOf(). Dziļā kopēšana bieži ir vēlams ar kopijas konstruktoru.