Java Copy Arrays (Verwenden von System arraycopy (), Looping-Konstrukt usw.)

In diesem Tutorial erfahren Sie anhand von Beispielen, wie Sie Arrays (sowohl eindimensional als auch zweidimensional) in Java kopieren können.

In Java können wir ein Array in ein anderes kopieren. Es gibt verschiedene Techniken, mit denen Sie Arrays in Java kopieren können.

1. Kopieren von Arrays mit dem Zuweisungsoperator

Nehmen wir ein Beispiel,

 class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )

Ausgabe :

 1, 2, 3, 4, 5, 6

Im obigen Beispiel haben wir den Zuweisungsoperator ( =) verwendet, um ein Array mit dem Namen numbers in ein anderes Array mit dem Namen positiveNumbers zu kopieren.

Diese Technik ist die einfachste und funktioniert auch. Es gibt jedoch ein Problem mit dieser Technik. Wenn wir Elemente eines Arrays ändern, ändern sich auch die entsprechenden Elemente der anderen Arrays. Beispielsweise,

 class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays // change value of first array numbers(0) = -1; // printing the second array for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )

Ausgabe :

 -1, 2, 3, 4, 5, 6

Hier können wir sehen, dass wir einen Wert des Zahlenarrays geändert haben. Wenn wir das Array positiveNumbers drucken, können wir sehen, dass der gleiche Wert auch geändert wird.

Dies liegt daran, dass beide Arrays auf dasselbe Array-Objekt verweisen. Dies liegt an der flachen Kopie. Um mehr über flache Kopien zu erfahren, besuchen Sie flache Kopien.

Um beim Kopieren der Arrays neue Array-Objekte zu erstellen, benötigen wir eine tiefe Kopie anstelle einer flachen Kopie.

2. Verwenden von Looping Construct zum Kopieren von Arrays

Nehmen wir ein Beispiel:

 import java.util.Arrays; class Main ( public static void main(String() args) ( int () source = (1, 2, 3, 4, 5, 6); int () destination = new int(6); // iterate and copy elements from source to destination for (int i = 0; i < source.length; ++i) ( destination(i) = source(i); ) // converting array to string System.out.println(Arrays.toString(destination)); ) )

Ausgabe :

 (1, 2, 3, 4, 5, 6)

Im obigen Beispiel haben wir die forSchleife verwendet, um jedes Element des Quellarrays zu durchlaufen. In jeder Iteration kopieren wir Elemente aus dem Quellarray in das Zielarray.

Hier beziehen sich das Quell- und das Zielarray auf verschiedene Objekte (Deep Copy). Wenn daher Elemente eines Arrays geändert werden, bleiben die entsprechenden Elemente eines anderen Arrays unverändert.

Beachten Sie die Aussage,

 System.out.println(Arrays.toString(destination));

Hier wird die toString () -Methode verwendet, um ein Array in einen String zu konvertieren. Weitere Informationen finden Sie in der toString () -Methode (offizielle Java-Dokumentation).

3. Kopieren von Arrays mit der Methode arraycopy ()

In Java enthält die Systemklasse eine Methode arraycopy()zum Kopieren von Arrays. Diese Methode ist ein besserer Ansatz zum Kopieren von Arrays als die beiden oben genannten.

Mit dieser arraycopy()Methode können Sie einen bestimmten Teil des Quellarrays in das Zielarray kopieren. Beispielsweise,

 arraycopy(Object src, int srcPos,Object dest, int destPos, int length)

Hier,

  • src - Quellarray, das Sie kopieren möchten
  • srcPos - Startposition (Index) im Quellarray
  • Ziel - Zielarray, in das Elemente aus der Quelle kopiert werden
  • destPos - Startposition (Index) im Zielarray
  • Länge - Anzahl der zu kopierenden Elemente

Nehmen wir ein Beispiel:

 // To use Arrays.toString() method import java.util.Arrays; class Main ( public static void main(String() args) ( int() n1 = (2, 3, 12, 4, 12, -2); int() n3 = new int(5); // Creating n2 array of having length of n1 array int() n2 = new int(n1.length); // copying entire n1 array to n2 System.arraycopy(n1, 0, n2, 0, n1.length); System.out.println("n2 = " + Arrays.toString(n2)); // copying elements from index 2 on n1 array // copying element to index 1 of n3 array // 2 elements will be copied System.arraycopy(n1, 2, n3, 1, 2); System.out.println("n3 = " + Arrays.toString(n3)); ) )

Ausgabe :

 n2 = (2, 3, 12, 4, 12, -2) n3 = (0, 12, 4, 0, 0)

Im obigen Beispiel haben wir die arraycopy()Methode verwendet,

  • System.arraycopy(n1, 0, n2, 0, n1.length) - Ganze Elemente aus dem n1-Array werden in das n2-Array kopiert
  • System.arraycopy(n1, 2, n3, 1, 2) - 2 Elemente des n1-Arrays ab Index 2 werden ab 1 des n3-Arrays in den Index kopiert

Wie Sie sehen können, ist der Standardanfangswert von Elementen eines Arrays vom Typ int 0.

4. Kopieren von Arrays mit der copyOfRange () -Methode

Wir können auch die in der Java Arrays-Klasse definierte copyOfRange () -Methode verwenden, um Arrays zu kopieren. Beispielsweise,

 // To use toString() and copyOfRange() method import java.util.Arrays; class ArraysCopy ( public static void main(String() args) ( int() source = (2, 3, 12, 4, 12, -2); // copying entire source array to destination int() destination1 = Arrays.copyOfRange(source, 0, source.length); System.out.println("destination1 = " + Arrays.toString(destination1)); // copying from index 2 to 5 (5 is not included) int() destination2 = Arrays.copyOfRange(source, 2, 5); System.out.println("destination2 = " + Arrays.toString(destination2)); ) )

Ausgabe

 Ziel1 = (2, 3, 12, 4, 12, -2) Ziel2 = (12, 4, 12)

Beachten Sie im obigen Beispiel die Zeile:

 int() destination1 = Arrays.copyOfRange(source, 0, source.length);

Hier können wir sehen, dass wir das Ziel1-Array erstellen und gleichzeitig das Quell-Array darauf kopieren. Wir erstellen das Ziel1-Array nicht, bevor wir die copyOfRange()Methode aufrufen . Weitere Informationen zur Methode finden Sie unter Java copyOfRange.

5. Kopieren von 2d Arrays mit Loop

Ähnlich wie beim eindimensionalen Array können wir auch das zweidimensionale Array mithilfe der forSchleife kopieren . Beispielsweise,

 import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < destination.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); for (int j = 0; j < destination(i).length; ++j) ( destination(i)(j) = source(i)(j); ) ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )

Ausgabe :

 ((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))

Beachten Sie im obigen Programm die Zeile,

 System.out.println(Arrays.deepToString(destination);

Hier wird das deepToString()Verfahren verwendet, um eine bessere Darstellung des zweidimensionalen Arrays bereitzustellen. Weitere Informationen finden Sie unter Java deepToString ().

Kopieren von 2d Arrays mit arraycopy ()

Um den obigen Code einfacher zu machen, können wir die innere Schleife System.arraycopy()wie im Fall eines eindimensionalen Arrays ersetzen . Beispielsweise,

 import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < source.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); System.arraycopy(source(i), 0, destination(i), 0, destination(i).length); ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )

Ausgabe :

 ((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))

Hier können wir sehen, dass wir die gleiche Ausgabe erhalten, indem wir die innere forSchleife durch die arraycopy()Methode ersetzen .

Interessante Beiträge...