Kopieren 2D-Arrays in Java

Waleed 12 Oktober 2023
  1. Verwenden der Schleifeniteration zum Kopieren eines 2D-Arrays in Java
  2. Verwenden der clone()-Methode zum Kopieren eines 2D-Arrays in Java
  3. Verwenden der Methode arraycopy() zum Kopieren eines 2D-Arrays in Java
Kopieren 2D-Arrays in Java

Immer wenn wir versuchen, Elemente des 2D-Arrays in ein anderes Array zu kopieren, weisen wir dem Ziel-Array oft ein ursprüngliches Array zu. Warum dieser Ansatz logischerweise falsch ist, werden wir zuerst diskutieren.

Auch wenn die unten genannte Lösung logischerweise falsch ist, möchten wir Sie wissen lassen, warum diese Lösung nicht funktioniert.

// Java Program to copy 2-dimensional array
// create 2D array
int[][] arr1 = {{2, 4, 6}, {8, 10, 12}};
// creating the same array with the same size
int[][] arr2 = new int[arr1.length];
// this code does not copy elements of arr1[ ] to arr2[ ] because arr2[ ] sill refer to the same
// location
arr2 = arr1;

Wenn wir arr2=arr1 schreiben, weisen wir arr2[ ] eine Referenz auf arr1[ ] zu. Daher wird die Änderung eines Arrays sowohl im kopierten als auch im ursprünglichen Array widergespiegelt, da beide Arrays auf dieselbe Position zeigen.

Um dies zu demonstrieren, werfen Sie einen Blick auf den unten abgebildeten Code.

// A Java program to demonstrate assigning an array reference doesn't make any sense

public class copy2DArray {
  public static void main(String[] args) {
    // Create an array arr1[]
    int[][] arr1 = {{2, 4, 5}, {6, 8, 10}};
    // Create an array arr2[] with the same size
    int[][] arr2 = new int[arr1.length][];
    // Doesn't copy elements of arr1 to arr2, but only arr2 starts refering arr1
    arr2 = arr1;
    // Any changing in the arr2 also reflects in the arr1 because
    // both are referin to the same location
    arr2[0][0] = 88;
    System.out.println("Elements of arr1[] are:");
    for (int i = 0; i < arr1.length; i++) {
      for (int j = 0; j < arr1.length; j++) {
        System.out.println(arr1[i][j] + " ");
      }
    }
    System.out.println("\n\nElements of arr2[] are:");
    for (int i = 0; i < arr2.length; i++) {
      for (int j = 0; j < arr2.length; j++) {
        System.out.println(arr2[i][j] + " ");
      }
    }
  }
}

Ausgabe:

Elements of arr1[] are:
88
4
6
8
Elements of arr2[] are:
88
4
6
8

Im obigen Beispiel haben wir die häufigsten Fehler besprochen, die Entwickler beim Kopieren von Elementen des 2D-Arrays häufig machen. Jetzt besprechen wir die richtige Methode, um dieselbe Aufgabe zu erfüllen.

In Java können wir Array-Elemente mit den folgenden Methoden kopieren:

  1. Iteriere alle Elemente eines Arrays und kopiere jedes Element.
  2. Mit der Methode clone().
  3. Mit der Methode arraycopy().

Verwenden der Schleifeniteration zum Kopieren eines 2D-Arrays in Java

Schleifeniterationstechnik zum Kopieren eines 2D-Arrays. Wenn Sie diese Methode verwenden, werden Sie feststellen, dass jede Änderung des Ziel- oder ursprünglichen Arrays keine Auswirkungen auf ein ursprüngliches Array hat. Somit bleibt das ursprüngliche Array intakt.

// A Java program to demonstrate assigning an array reference doesn't make any sense
import java.util.Arrays;
public class copy2DArray {
  public static void main(String[] args) {
    // Create an array arr1[ ]
    int[][] arr1 = {{2, 4, 5}, {6, 8, 10}};
    // Create an array arr2[ ] with the same size
    int[][] arr2 = new int[arr1.length][];
    // Copying elements of arr1[ ] to arr2[ ]
    for (int i = 0; i < arr1.length; i++) {
      // allocation space to each row of arr2[]
      arr2[i] = new int[arr1[i].length];
      for (int j = 0; j < arr1[i].length; j++) {
        arr2[i][j] = arr1[i][j];
      }
    }

    // Any change in the elements of arr2[ ] will not be reflected  in an original array
    arr2[0][0] = 90;
    System.out.println("Elements of arr1[] are:");
    for (int i = 0; i < arr1.length; i++) {
      for (int j = 0; j < arr1[0].length; j++) {
        System.out.println(arr1[i][j] + " ");
      }
    }
    System.out.println("\n\nElements of arr2[] are:");
    for (int i = 0; i < arr2.length; i++) {
      for (int j = 0; j < arr2[0].length; j++) {
        System.out.println(arr2[i][j] + " ");
      }
    }
  }
}

Ausgabe:

Elements of arr1[] are:
2 
4
5 
6 
8
10 
Elements of arr2[] are:
90 
4 
5 
6 
8 
10

Verwenden der clone()-Methode zum Kopieren eines 2D-Arrays in Java

Wir haben die Loop-Iteration-Technik verwendet, um 2D-Array-Elemente in der vorherigen Methode zu kopieren. Wir können die gleiche Aufgabe mit der Methode clone() erledigen.

// A Java program to demonstrate assigning an array reference doesn't make any sense

import java.util.Arrays;
public class copy2DArray {
  public static void main(String[] args) {
    // Create an array arr1[]
    int[][] arr1 = {{2, 4, 5}, {6, 8, 10}};
    // Create an array arr2[] with the same size
    int[][] arr2 = new int[arr1.length][];
    // Copying elements of arr1[ ] to arr2[ ] using the clone() method
    for (int i = 0; i < arr1.length; i++) arr2[i] = arr1[i].clone();
    // Any change in the elements of arr2[] will not be reflected in an original array
    arr2[0][0] = 90;
    System.out.println("Elements of arr1[] are:");
    for (int i = 0; i < arr1.length; i++) {
      for (int j = 0; j < arr1[0].length; j++) {
        System.out.println(arr1[i][j] + " ");
      }
    }
    System.out.println("\n\nElements of arr2[] are:");
    for (int i = 0; i < arr2.length; i++) {
      for (int j = 0; j < arr2[0].length; j++) {
        System.out.println(arr2[i][j] + " ");
      }
    }
  }
}

Ausgabe:

Elements of arr1[] are:
2 
4
5 
6 
8
10 
Elements of arr2[] are:
90 
4 
5 
6 
8 
10

Verwenden der Methode arraycopy() zum Kopieren eines 2D-Arrays in Java

Ebenso können wir 2D-Arrays mit der Methode arraycopy() kopieren. Mit dieser Methode können wir Elemente eines beliebigen 2D-Arrays kopieren, ohne alle Array-Elemente zu durchlaufen. Um diese Methode zu verwenden, müssen wir die folgenden Parameter angeben:

  • src: Quell-Array, das Sie kopieren müssen
  • srcPos: Startort eines Original-Arrays.
  • dest: Zielarray.
  • destPos: Anfangsindex des Zielarrays.
  • length: Gesamtzahl der Elemente des 2D-Arrays, die wir kopieren möchten

Ausnahme:

  • NullPointerException: wenn Quell- oder Zielarray nicht definiert oder nicht vorhanden sind.
  • ArrayStoreException: Wenn ein Entwickler versucht, einen Integer-Array-Typ in ein String-Array zu kopieren, löst diese Situation automatisch diese Ausnahme aus.

Beispiel:

package sampleProject;
import java.util.Arrays;
public class Codesample {
  public static void main(String[] args) {
    // Create an array arr1[]
    int[][] arr1 = {{2, 4, 5}, {6, 8, 10}};
    // Create an array arr2[] with the same size
    int[][] arr2 = new int[arr1.length][];
    // Copying elements of arr1[] to arr2[] using the clone() method
    for (int i = 0; i < arr1.length; i++) {
      arr2[i] = new int[arr1[i].length];
      System.arraycopy(arr1[i], 0, arr2[i], 0, arr1[i].length);
    }
    // Any change in the elements of arr2[] will not be reflected in an original array
    arr2[0][0] = 90;
    System.out.println("Elements of arr1[] are:");
    for (int i = 0; i < arr1.length; i++) {
      for (int j = 0; j < arr1[0].length; j++) {
        System.out.println(arr1[i][j] + " ");
      }
    }
    System.out.println("\n\nElements of arr2[] are:");
    for (int i = 0; i < arr2.length; i++) {
      for (int j = 0; j < arr2[0].length; j++) {
        System.out.println(arr2[i][j] + " ");
      }
    }
  }
}

Ausgabe:

Elements of arr1[] are:
2 
4
5 
6 
8
10 
Elements of arr2[] are:
90 
4 
5 
6 
8 
10

Verwandter Artikel - Java Array