So kopieren Sie ein Array in Java
Die nachfolgend beschriebenen Methoden sind nur auf eindimensionale Arrays anwendbar. Bevor wir über die verschiedenen Möglichkeiten zum Kopieren eines Arrays in Java sprechen, zeigen wir Ihnen, wie Sie ein Array NICHT kopieren.
So kopieren Sie ein Array NICHT in Java
Arrays in Java sind Objekte. Wenn Sie versuchen, sie als Variablen zu behandeln, können Sie (!) Aberwhat you are really copying is the reference!. Das folgende Beispiel erläutert diese Aussage.
HowNOTtoCopyAnArray.java
package com.techfou.copyarray; import java.util.Arrays; public class HowNOTtoCopyAnArray { public static void main(String[] args){ int[] x = {1, 2, 3, 4, 5}; int[] y = x; //don't copy array like this! System.out.println(Arrays.toString(x)); System.out.println(Arrays.toString(y)+"\n"); x[1] = 22; // y[1] will display 22! same reference System.out.println(Arrays.toString(x)); System.out.println(Arrays.toString(y)+"\n"); y[4] = 55; // x[4] will display 55! System.out.println(Arrays.toString(x)); System.out.println(Arrays.toString(y)); } }
Ausgabe:
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 22, 3, 4, 5] [1, 22, 3, 4, 5] [1, 22, 3, 4, 55] [1, 22, 3, 4, 55]
1. Object.clone()
Arrays
erben Methoden von der KlasseObject
, undclone
ist eine davon. Wenn Sie ein Array so kopieren müssen, wie es ist, sollten Sie diese Methode verwenden.
CloneArray.java
package com.techfou.copyarray; import java.util.Arrays; public class CloneArray { public static void main(String[] args){ int[] x = {1, 2, 3, 4, 5}; int[] y = x.clone(); System.out.println(Arrays.toString(x)); System.out.println(Arrays.toString(y)+"\n"); x[1] = 22; System.out.println(Arrays.toString(x)); System.out.println(Arrays.toString(y)+"\n"); y[4] = 55; System.out.println(Arrays.toString(x)); System.out.println(Arrays.toString(y)); } }
Ausgabe:
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 22, 3, 4, 5] [1, 2, 3, 4, 5] [1, 22, 3, 4, 5] [1, 2, 3, 4, 55]
2. Arrays.copyOf()
In der KlasseArrays
gibt es zwei Methoden, mit denen ein Array ganz oder teilweise kopiert wird. Hier ist ein Beispiel für die Methode voncopyOf()
.
ArraysCopyOfMethod.java
package com.example.copyarray; import java.util.Arrays; public class ArraysCopyOfMethod { public static void main(String[] args){ String[] x = {"one", "two", "three", "four", "five"}; String[] y = Arrays.copyOf(x, x.length); String[] z = Arrays.copyOf(x, 3); //will copy the 3 first elements of array x System.out.println("Array x: " + Arrays.toString(x)); System.out.println("Array y: " + Arrays.toString(y)); System.out.println("Array z: " + Arrays.toString(z)); } }
Ausgabe:
Array x: [one, two, three, four, five] Array y: [one, two, three, four, five] Array z: [one, two, three]
3. Arrays.copyOfRange()
Dies ist ein Beispiel für die copyOfRange () -Methode.
ArraysCopyOfRangeMethod.java
package com.example.copyarray; import java.util.Arrays; public class ArraysCopyOfRangeMethod { public static void main(String[] args){ String[] x = {"one", "two", "three", "four", "five"}; String[] y = Arrays.copyOfRange(x, 0, x.length); //full copy of the array String[] z = Arrays.copyOfRange(x, x.length-2, x.length); //copy only the last 2 elements System.out.println("Array x: " + Arrays.toString(x)); System.out.println("Array y: " + Arrays.toString(y)); System.out.println("Array z: " + Arrays.toString(z)); } }
Ausgabe:
Array x: [one, two, three, four, five] Array y: [one, two, three, four, five] Array z: [four, five]
4. System.arraycopy()
MitSystem.arraycopy()
können Sie den Bereich der Elemente aus dem zu kopierenden Quellarray,
und der Zielposition steuern.
Überprüfen Sie die Signatur vonSystem.arraycopy
(JavaDoc):
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
SystemArrayCopy.java
package com.example.copyarray; import java.util.Arrays; public class SystemArrayCopy { public static void main(String[] args){ String[] x = {"one", "two", "three", "four", "five"}; String[] y = new String[2]; System.arraycopy(x, 3, y, 0, 2); System.out.println("Array x: " + Arrays.toString(x)); System.out.println("Array y: " + Arrays.toString(y) + "\n"); Object[] z = new Object[5]; System.arraycopy(x, 0, z, 0, 5); System.out.println("Array z: " + Arrays.toString(z)+"\n"); Integer[] w = {3, 4, 5}; System.out.println("Array w: " + Arrays.toString(w)); //copy from the second value (1) of array w to z and place in the fourth place (3) the 2 values System.arraycopy(w, 1, z, 3, 2); System.out.println("Array z: " + Arrays.toString(z)); } }
Ausgabe:
Array x: [one, two, three, four, five] Array y: [four, five] Array z: [one, two, three, four, five] Array w: [3, 4, 5] Array z: [one, two, three, 4, 5]
Note
Vergessen Sie nicht, Ihren Code mit try catch zu umgeben, um ausgelöste Ausnahmen zu behandeln