java copy array how copy clone an array java
In diesem Tutorial zum Kopieren und Klonen von Arrays werden die verschiedenen Methoden zum Kopieren eines Arrays in Java erläutert:
Hier werden wir den Kopiervorgang von Java-Arrays diskutieren. Java bietet verschiedene Möglichkeiten, um Kopien von Array-Elementen zu erstellen. Wie wir wissen, können Arrays in Java Elemente primitiver Typen oder Objekte oder Referenzen enthalten.
Beim Erstellen von Kopien primitiver Typen ist die Aufgabe recht einfach. Bei Objekten oder Referenzen müssen Sie jedoch darauf achten, ob die Kopie tief oder flach ist.
=> Schauen Sie sich hier den Java Beginners Guide an.
Flache Kopie erstellt eine Kopie des Elements. Es ist kein Problem, wenn primitive Datentypen beteiligt sind. Wenn es sich jedoch um Referenzen handelt, kopiert eine flache Kopie nur den Wert und nicht die zugrunde liegenden Informationen.
Obwohl Sie Kopien von Elementen erstellt haben, wird eine Änderung in einer Kopie auch in einer anderen Kopie angezeigt, wenn die Speicherorte gemeinsam genutzt werden. Um dies zu verhindern, müssen Sie eine tiefe Kopie erstellen, in der die Speicherorte nicht gemeinsam genutzt werden.
Was du lernen wirst:
Java-Arrays kopieren und klonen
Mit Java können Sie Arrays entweder mit der von java.util oder der Systemklasse bereitgestellten Direktkopiermethode kopieren. Es bietet auch eine Klonmethode, mit der ein gesamtes Array geklont werden kann.
In diesem Tutorial werden die folgenden Methoden zum Kopieren und Klonen von Arrays erläutert.
- Manuelles Kopieren mit for-Schleife
- Verwenden von System.arraycopy ()
- Verwenden von Arrays.copyOf ()
- Verwenden von Arrays.copyOfRange ()
- Verwenden von Object.clone ()
Lass uns erforschen!!
Manuelles Kopieren mit For Loop
Normalerweise führen wir beim Kopieren von Variablen, z. B. a und b, den Kopiervorgang wie folgt aus:
a = b;
Es wird nicht richtig funktionieren, wenn wir dieselbe Methode auf Arrays anwenden.
Sehen wir uns ein Programmierbeispiel an.
public class Main { public static void main(String() args) { int intArray() = {12,15,17}; //print original intArray System.out.println('Contents of intArray() before assignment:'); for (int i=0; i Ausgabe:

In dem obigen Programm gibt es zwei Arrays, d. H. IntArray und copyArray. Die Aufgabe besteht darin, den Inhalt des intArray nach copyArray zu kopieren. Dazu wird die Anweisung copyArray = intArray eingeführt. Hier werden die Referenzen des Arrays zugewiesen. Daher ist dies kein tatsächliches Kopieren.
Aufgrund der obigen Anweisung wird der Speicherort des intArray auch vom copyArray gemeinsam genutzt. Wenn nun das copyArray-Element inkrementiert wird, wird diese Änderung auch im intArray wiedergegeben. Dies wird in der Ausgabe angezeigt.
Um dieses Problem zu lösen, verwenden wir eine Methode zum Kopieren des Arrays mit der for-Schleife. Hier wird jedes Element des ursprünglichen Arrays mit einer for-Schleife in das neue Array kopiert.
Dieses Programm wird unten gezeigt.
public class Main { public static void main(String() args) { int intArray() = {12,15, 17}; // define an array copyArray to copy contents of intArray int copyArray() = new int(intArray.length); // copy contents of intArray to copyArray for (int i=0; i Ausgabe:

Hier haben wir das vorherige Programm so geändert, dass es for-Schleife enthält, und innerhalb von for-Schleife weisen wir jedes Element von intArray dem entsprechenden Element von copyArray zu. Auf diese Weise werden die Elemente tatsächlich kopiert. Wenn also ein Array geändert wird, werden die Änderungen nicht in einem anderen Array wiedergegeben.
Verwenden von System.arraycopy ()
Die Systemklasse von Java verfügt über eine Methode namens 'ArrayCOpy', mit der Sie Elemente eines Arrays in ein anderes Array kopieren können.
Der allgemeine Prototyp dieser Methode lautet wie folgt:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Hier,
- src_array => Quellarray, von dem der Inhalt kopiert werden soll.
- src_Pos => Die Position im Quell-Array, an der der Kopiervorgang beginnt.
- dest_array => Zielarray, in das Elemente kopiert werden sollen.
- dest_Pos => Startposition im Zielarray für die zu kopierenden Elemente.
- Länge => Länge des zu kopierenden Arrays.
Lassen Sie uns diese Methode anhand eines Beispiels verstehen.
class Main { public static void main(String() args) { //declaring a source array char() src_array = { 'S','o','f','t','w','a','r','e','T','e','s','t','i','n','g','H','e','l','p'}; char() dest_array = new char(19); System.arraycopy(src_array, 0, dest_array, 0,19); System.out.println('Source array:' + String.valueOf(src_array)); System.out.println('Destination array after arraycopy:'+ String.valueOf(dest_array)); } }
Ausgabe:

Im obigen Programm verwenden wir die Methode 'arraycopy', um ein Array in ein anderes Array zu kopieren. Sie können den Aufruf der Arraycopy-Methode sehen. Wir kopieren das Quellarray von Anfang an (0thlocation) und kopieren Sie das gesamte Array.
Zuletzt zeigen wir das String-Äquivalent sowohl des Quell- als auch des Ziel-Arrays an.
Mit der Arraycopy-Methode können Sie auch Teil-Arrays kopieren, da die Start- und Endelementpositionen als Argumente verwendet werden. Diese Methode erstellt eine flache Kopie der Array-Elemente.
Verwenden von Arrays.copyOf ()
Die Methode Arrays.copyOf () verwendet intern die Methode System.arraycopy (). Obwohl es nicht so effizient wie Arraycopy ist, kann es genau wie die Arraycopy-Methode zum Kopieren eines vollständigen oder teilweisen Arrays verwendet werden.
Die Methode 'copyOf ()' ist Teil des Pakets 'java.util' und gehört zur Klasse 'Arrays'.
Der Prototyp dieser Methode lautet wie folgt:
public static int() copyOf(int() original_array,int newLength)
Wo,
- Original: Das Array, das in das neue Array kopiert werden soll.
- newLength: Die Länge des kopierten Arrays, das zurückgegeben werden soll.
Somit erstellt diese Methode eine Kopie des im ersten Argument angegebenen Arrays auf die angegebene Länge, indem die Länge des neuen Arrays mit 0 abgeschnitten oder aufgefüllt wird. Dies bedeutet, wenn die Länge des kopierten Arrays größer als das ursprüngliche Array ist, werden für die verbleibenden Elemente Nullen ersetzt.
Das unten angegebene Programm zeigt ein Beispiel für die copyOf-Methode.
importjava.util.Arrays; public class Main { public static void main(String args()) { // define original array int() even_Array = new int() {2,4,6,8}; System.out.println('Original Array:' + Arrays.toString(even_Array)); // copying array even_Array to copy_Array int() copy_Array = Arrays.copyOf(even_Array,5); System.out.println('Copied Array:' + Arrays.toString(copy_Array)); // assign value to unassigned element of copied array copy_Array(4) = 10; System.out.println('Copied and modified Array:' + Arrays.toString(copy_Array)); } }
Ausgabe:

Im obigen Programm kopieren wir das Even_Array der Länge 4 mit der copyOf-Methode. Das zweite Argument ist 5. Daher enthält das neu kopierte Array 5 Elemente. Die ersten vier sind die gleichen wie das ursprüngliche Array und das fünfte Element ist 0, da copyOf es auffüllt, da die Länge des ursprünglichen Arrays geringer ist als die des neuen Arrays.
Verwenden von Arrays.copyOfRange ()
Die Methode Arrays.copyOfRange () wird speziell verwendet, wenn Sie Teilarrays kopieren möchten. Wie die copyOf () -Methode verwendet auch diese Methode intern die System.arraycopy () -Methode.
Der Prototyp der Arrays.copyOfRange () -Methode lautet wie folgt:
public static short() copyOfRange(short() original, int from, int to)
wo,
- Original: Das Array, aus dem ein Bereich kopiert werden soll.
- von: Anfangsindex des zu kopierenden Bereichs, einschließlich.
- zu: Der endgültige Index des zu kopierenden Bereichs, exklusiv.
Eine Beispielimplementierung der copyOfRange-Methode ist unten dargestellt.
import java.util.Arrays; class Main { public static void main(String args()) { int intArray() = { 10,20,30,40,50 }; // to index is within the range int() copyArray = Arrays.copyOfRange(intArray, 2, 6); System.out.println('Array copy with both index within the range: ' + Arrays.toString(copyArray)); //to index is out of range int() copy1 = Arrays.copyOfRange(intArray, 4, intArray.length + 3); System.out.println('Array copy with to index out of range: ' + Arrays.toString(copy1)); } }
Ausgabe:

Verwenden von Object.clone ()
Das Java-Array implementiert intern eine klonbare Schnittstelle und daher ist es einfach, ein Java-Array zu klonen. Sie können sowohl eindimensionale als auch zweidimensionale Arrays klonen. Wenn Sie ein eindimensionales Array klonen, wird eine tiefe Kopie der Array-Elemente erstellt, die die Werte kopiert.
Wenn Sie andererseits zweidimensionale oder mehrdimensionale Arrays klonen, wird eine flache Kopie von Elementen erstellt, d. H. Es werden nur Referenzen kopiert. Dieses Klonen von Arrays erfolgt nach der von den Arrays bereitgestellten Methode 'Clone ()'.
Eine tiefe Kopie von 1-D-Arrays als Ergebnis des Klonens kann wie folgt dargestellt werden:

Lassen Sie uns nun das Klonen von 1-D-Arrays in einem Java-Programm implementieren.
class Main { public static void main(String args()) { int num_Array() = {5,10,15,20,25,30}; int clone_Array() = num_Array.clone(); System.out.println('Original num_Array:'); for (int i = 0; i Wie Sie in der Ausgabe sehen können, gibt der Ausdruck zur Überprüfung der Gleichheit beider Arrays false zurück. Dies liegt daran, dass das Klonen eines eindimensionalen Arrays zu einer tiefen Kopie führt, bei der die Werte in ein neues Array kopiert werden und nicht nur Referenzen.
Häufig gestellte Fragen
F # 1) Wie erstelle ich eine Kopie eines Arrays in Java?
Antworten: Es gibt verschiedene Methoden zum Kopieren eines Arrays.
- Sie können eine for-Schleife verwenden und Elemente einzeln nacheinander kopieren.
- Verwenden Sie die Klonmethode, um ein Array zu klonen.
- Verwenden Sie die arraycopy () -Methode der Systemklasse.
- Verwenden Sie die Methoden copyOf () oder copyOfRange () der Arrays-Klasse.
F # 2) Wie ordnen Sie ein Array einem anderen zu?
Antworten: Sie können das Array mit einem einfachen Zuweisungsoperator (=) einem anderen zuweisen. Sie müssen sicherstellen, dass die beiden Arrays vom gleichen Datentyp sind und eine identische Dimension haben.
F # 3) Was ist eine flache und eine tiefe Kopie?
Antworten: Beim flachen Kopieren werden nur die Attribute der betreffenden Objekte oder Arrays kopiert. Änderungen am kopierten Array werden also im Original wiedergegeben. Das Java-Klonen ist ein Beispiel für eine flache Kopie.
Programm zum Kopieren der DVD auf den Computer
Eine tiefe Kopie ist diejenige, bei der wir eine vollständige Kopie des Objekts benötigen, damit es sich beim Klonen oder Kopieren dieses Objekts um eine unabhängige Kopie handelt. Wenn es sich um primitive oder integrierte Typen handelt, gibt es keinen Unterschied zwischen der flachen und der tiefen Kopie.
F # 4) Was macht ein Array-Klon?
Antworten: Die Klonmethode von Arrays wird verwendet, um die Attribute eines Objekts in ein anderes zu kopieren. Dazu wird eine flache Kopie verwendet.
F # 5) Können Sie ein Array in einem Array speichern?
Antworten: Arrays können Arrays enthalten, die mit Elementen des gleichen Typs (Grundelement oder Objekt) versehen sind. Dies bedeutet, dass Sie kein Integer-Array in einem String-Array speichern können.
Fazit
In diesem Tutorial haben wir uns mit Kopierarrays und Klonarrays in Java befasst. Wir haben verschiedene Methoden / Ansätze zum Kopieren und Klonen eines Arrays gesehen.
Beachten Sie, dass die meisten dieser Methoden eine flache Kopie implementieren. Bei primitiven Datentypen unterscheiden sich flache und tiefe Kopien nicht. Wenn ein Array jedoch Objekte oder Referenzen enthält, muss der Programmierer eine tiefe Kopie gemäß den Anforderungen implementieren.
In unseren nachfolgenden Tutorials werden wir uns weiter mit Java-Arrays befassen.
=> Lesen Sie die Easy Java Training Series durch.
Literatur-Empfehlungen
- Java Array Length Tutorial mit Codebeispielen
- Java Generic Array - Wie simuliere ich generische Arrays in Java?
- Java Array - Wie drucke ich Elemente eines Arrays in Java?
- Mehrdimensionale Arrays in Java (2D- und 3D-Arrays in Java)
- Übergeben / Zurückgeben eines Arrays in Java
- So sortieren Sie ein Array in Java - Tutorial mit Beispielen
- Java-Array - Deklarieren, Erstellen und Initialisieren eines Arrays in Java
- Entfernen / Löschen eines Elements aus einem Array in Java