Java Array-Kopiertechniken: Umfassender Leitfaden
Java Array-Kopiertechniken
Lernen Sie, wie man eindimensionale und zweidimensionale Arrays in Java mit Zuweisung, Schleifen, System.arraycopy, Arrays.copyOfRange und mehr dupliziert, mit klaren Beispielen und Best-Practice-Tipps.
1. Kopieren mit dem Zuweisungsoperator
Das Zuweisen einer Array-Variablen zu einer anderen ist die einfachste Methode. Sie kopiert die Referenz, nicht die Daten.
class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5, 6};
int[] positiveNumbers = numbers; // Referenzkopie
for (int number : positiveNumbers) {
System.out.print(number + ", ");
}
}
}
Ausgabe:
1, 2, 3, 4, 5, 6
Sowohl numbers als auch positiveNumbers zeigen nun auf dasselbe Array-Objekt. Das Ändern eines Elements wirkt sich auf das andere aus:
class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5, 6};
int[] positiveNumbers = numbers;
numbers[0] = -1;
for (int number : positiveNumbers) {
System.out.print(number + ", ");
}
}
}
Ausgabe:
-1, 2, 3, 4, 5, 6
Dies ist eine flache Kopie. Um unbeabsichtigte Nebeneffekte zu vermeiden, verwenden Sie eine Deep-Copy-Technik.
2. Deep Copy mit einer Schleife
Das Iterieren über jedes Element und das Zuweisen zu einem neuen Array erstellt eine unabhängige Kopie.
import java.util.Arrays;
class Main {
public static void main(String[] args) {
int[] source = {1, 2, 3, 4, 5, 6};
int[] destination = new int[source.length];
for (int i = 0; i < source.length; ++i) {
destination[i] = source[i];
}
System.out.println(Arrays.toString(destination));
}
}
Ausgabe:
[1, 2, 3, 4, 5, 6]
Da source und destination unterschiedliche Objekte sind, wirken sich Änderungen an einem nicht auf das andere aus.
3. System.arraycopy() verwenden
Javas System.arraycopy-Methode bietet eine schnelle, eingebaute Möglichkeit, Array-Segmente zu kopieren.
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src– Quell-ArraysrcPos– Startindex im Quell-Arraydest– Ziel-ArraydestPos– Startindex im Ziel-Arraylength– Anzahl der zu kopierenden Elemente
Beispiel:
import java.util.Arrays;
class Main {
public static void main(String[] args) {
int[] n1 = {2, 3, 12, 4, 12, -2};
int[] n2 = new int[n1.length];
System.arraycopy(n1, 0, n2, 0, n1.length);
System.out.println("n2 = " + Arrays.toString(n2));
int[] n3 = new int[5];
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]
4. Kopieren mit Arrays.copyOfRange()
Wenn Sie ein neues Array benötigen, das einen bestimmten Ausschnitt enthält, ist Arrays.copyOfRange ideal.
import java.util.Arrays;
class ArraysCopy {
public static void main(String[] args) {
int[] source = {2, 3, 12, 4, 12, -2};
int[] destination1 = Arrays.copyOfRange(source, 0, source.length);
System.out.println("destination1 = " + Arrays.toString(destination1));
int[] destination2 = Arrays.copyOfRange(source, 2, 5);
System.out.println("destination2 = " + Arrays.toString(destination2));
}
}
Ausgabe:
destination1 = [2, 3, 12, 4, 12, -2] destination2 = [12, 4, 12]
5. 2D-Arrays mit einer Schleife kopieren
Das Deep-Copy eines zweidimensionalen Arrays erfordert das Kopieren jeder Zeile einzeln.
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) {
destination[i] = new int[source[i].length];
for (int j = 0; j < destination[i].length; ++j) {
destination[i][j] = source[i][j];
}
}
System.out.println(Arrays.deepToString(destination));
}
}
Ausgabe:
[[1, 2, 3, 4], [5, 6], [0, 2, 42, -4, 5]]
6. 2D-Array-Kopie mit System.arraycopy()
Ersetzen Sie die innere Schleife durch arraycopy für saubereren Code.
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) {
destination[i] = new int[source[i].length];
System.arraycopy(source[i], 0, destination[i], 0, destination[i].length);
}
System.out.println(Arrays.deepToString(destination));
}
}
Ausgabe:
[[1, 2, 3, 4], [5, 6], [0, 2, 42, -4, 5]]
Java
- C# Arrays meistern: Deklaration, Initialisierung und Operationen
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- C++ Arrays verstehen: Deklaration, Initialisierung und Pointer‑Techniken
- C++ Dynamische Array‑Allokation: Praktischer Leitfaden mit Code‑Beispielen
- Java Arrays Tutorial: Deklaration, Erstellung und Initialisierung – Beispielcode
- Array von Objekten in Java erstellen: Schritt-für-Schritt-Anleitung