Wat is de meest efficiënte manier om een array te kopiëren?
sobes.tech AI
Antwoord van AI
Voor primitieve datatypes en objecten zonder diepe kopie zijn de meest efficiënte methoden:
-
System.arraycopy(): Native methode geoptimaliseerd voor snelle kopieën.// Voorbeeld van gebruik van 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(): Handige methode uit de klasseArrays. Gebruikt internSystem.arraycopy().// Voorbeeld van gebruik van Arrays.copyOf int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
Voor diepe kopieën van objecten (wanneer je niet alleen de referenties, maar ook de objecten waarnaar ze wijzen, moet kopiëren), kunnen andere benaderingen nodig zijn, zoals:
-
Implementatie van de
Cloneableinterface en overschrijven van declone()methode. Niet aanbevolen voor nieuwe ontwikkelingen vanwege meerdere problemen.// Voorbeeld van implementatie van Cloneable en clone() class MyObject implements Cloneable { int value; MyObject innerObject; @Override protected Object clone() throws CloneNotSupportedException { MyObject cloned = (MyObject) super.clone(); // diepe kopie van het interne object cloned.innerObject = (MyObject) this.innerObject.clone(); return cloned; } } -
Gebruik van een kopieerconstructor.
// Voorbeeld van een kopieerconstructor class MyObject { int value; MyObject innerObject; public MyObject(MyObject other) { this.value = other.value; // diepe kopie van het interne object this.innerObject = new MyObject(other.innerObject); } } -
Gebruik van serialisatie/deserialisatie (bijvoorbeeld met
ByteArrayInputStreamenObjectInputStream). Kan inefficiënt zijn voor grote arrays of objecten dieSerializableniet implementeren. -
Gebruik van externe bibliotheken (bijvoorbeeld Apache Commons Lang met de methode
SerializationUtils.clone()).
De meest efficiënte methode voor oppervlakkige (plat) kopieën van primitieve types en eenvoudige objecten is System.arraycopy() of Arrays.copyOf(). Voor diepe kopieën wordt vaak de kopieerconstructor gebruikt.