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

Java-Kopie-Arrays

Java-Kopie-Arrays

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 mehrere Techniken, die Sie verwenden können, um Arrays in Java zu kopieren.


1. Kopieren von Arrays mit 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 (= ), um ein Array namens numbers zu kopieren zu einem anderen Array namens positiveNumbers .

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 entsprechende Elemente der anderen Arrays. Zum Beispiel

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 der Zahlen geändert haben Reihe. Wenn wir die positiveNumbers drucken array, können wir sehen, dass derselbe Wert auch geändert wird.

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

Um nun neue Array-Objekte zu erstellen, während die Arrays kopiert werden, benötigen wir eher eine tiefe Kopie als eine flache Kopie.


2. Schleifenkonstrukt zum Kopieren von Arrays verwenden

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 den for verwendet Schleife, um jedes Element des Quellarrays zu durchlaufen. In jeder Iteration kopieren wir Elemente aus der Quelle Array zum Ziel Array.

Hier verweisen Quell- und Zielarray auf unterschiedliche Objekte (Deep Copy). Wenn also Elemente eines Arrays geändert werden, bleiben die entsprechenden Elemente eines anderen Arrays unverändert.

Beachten Sie die Anweisung,

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

Hier wird die Methode toString() verwendet, um ein Array in einen String umzuwandeln. Um mehr zu erfahren, besuchen Sie die Methode toString() (offizielle Java-Dokumentation).


3. Kopieren von Arrays mit der Methode arraycopy()

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

Die arraycopy() -Methode können Sie einen bestimmten Teil des Quellarrays in das Zielarray kopieren. Zum Beispiel

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

Hier,

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 den arraycopy() verwendet Methode,

Wie Sie sehen können, ist der standardmäßige Anfangswert von Elementen einer int Typ-Array ist 0.


4. Kopieren von Arrays mit der Methode copyOfRange()

Wir können auch die Methode copyOfRange() verwenden, die in der Java-Klasse Arrays definiert ist, um Arrays zu kopieren. Zum Beispiel

// 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

destination1 = [2, 3, 12, 4, 12, -2]
destination2 = [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 destination1 erstellen -Array und Kopieren der Quelle Array gleichzeitig darauf. Wir erstellen nicht die destination1 -Array vor dem Aufruf von copyOfRange() Methode. Um mehr über die Methode zu erfahren, besuchen Sie Java copyOfRange.


5. Kopieren von 2D-Arrays mit Loop

Ähnlich wie beim eindimensionalen Array können wir auch das 2-dimensionale Array mit dem for kopieren Schleife. Zum Beispiel

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 die deepToString() -Methode wird verwendet, um eine bessere Darstellung des zweidimensionalen Arrays bereitzustellen. Um mehr zu erfahren, besuchen Sie Java deepToString().


Kopieren von 2D-Arrays mit arraycopy()

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

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 dieselbe Ausgabe erhalten, indem wir den inneren for ersetzen Schleife mit arraycopy() Methode.


Java

  1. C#-Arrays
  2. Java-Operatoren
  3. Java-Kommentare
  4. Java-Schnittstelle
  5. Java-Versuch-mit-Ressourcen
  6. Java-Anmerkungen
  7. Arrays in C++ | Erklären | Initialisieren | Zeiger auf Array-Beispiele
  8. C++ Dynamische Zuordnung von Arrays mit Beispiel
  9. Tutorial zu Java-Arrays:Deklarieren, erstellen, initialisieren [Beispiel]
  10. So erstellen Sie ein Array von Objekten in Java