Was ist die effizienteste Methode, um ein Array zu kopieren?
sobes.tech KI
Antwort von AI
Für primitive Datentypen und Objekte ohne tiefe Kopie sind die effizientesten Methoden:
-
System.arraycopy(): Native Methode, optimiert für schnelles Kopieren.// Beispiel für die Verwendung von 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(): Praktische Methode aus der KlasseArrays. Intern verwendet sieSystem.arraycopy().// Beispiel für die Verwendung von Arrays.copyOf int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = Arrays.copyOf(sourceArray, sourceArray.length);
Für tiefe Kopien von Objekten (wenn nicht nur Referenzen, sondern auch die Objekte, auf die sie zeigen, kopiert werden sollen), können andere Ansätze erforderlich sein, wie:
-
Implementierung des
Cloneable-Interfaces und Überschreiben derclone()-Methode. Nicht empfohlen für neue Entwicklungen wegen zahlreicher Probleme.// Beispiel für die Implementierung von Cloneable und clone() class MyObject implements Cloneable { int value; MyObject innerObject; @Override protected Object clone() throws CloneNotSupportedException { MyObject cloned = (MyObject) super.clone(); // tiefe Kopie des inneren Objekts cloned.innerObject = (MyObject) this.innerObject.clone(); return cloned; } } -
Verwendung eines Kopierkonstruktors.
// Beispiel für einen Kopierkonstruktor class MyObject { int value; MyObject innerObject; public MyObject(MyObject other) { this.value = other.value; // tiefe Kopie des inneren Objekts this.innerObject = new MyObject(other.innerObject); } } -
Verwendung von Serialisierung/Deserialisierung (z.B. mit
ByteArrayInputStreamundObjectInputStream). Kann ineffizient sein für große Arrays oder Objekte, dieSerializablenicht implementieren. -
Verwendung externer Bibliotheken (z.B. Apache Commons Lang mit
SerializationUtils.clone()).
Am effizientesten für flache (Oberflächen-) Kopien primitiver Typen und einfacher Objekte ist System.arraycopy() oder Arrays.copyOf(). Für tiefe Kopien ist die Verwendung eines Kopierkonstruktors oft vorzuziehen.