Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

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)

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

  1. C# Arrays meistern: Deklaration, Initialisierung und Operationen
  2. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  3. Java Kommentare: Typen, Verwendung und Best Practices
  4. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  5. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  6. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  7. C++ Arrays verstehen: Deklaration, Initialisierung und Pointer‑Techniken
  8. C++ Dynamische Array‑Allokation: Praktischer Leitfaden mit Code‑Beispielen
  9. Java Arrays Tutorial: Deklaration, Erstellung und Initialisierung – Beispielcode
  10. Array von Objekten in Java erstellen: Schritt-für-Schritt-Anleitung