Bei einem gegebenen Array müssen wir seine Elemente in ein anderes Array kopieren. Einem naiven Benutzer fällt der folgende Weg ein, der jedoch falsch ist, wie unten dargestellt:
// Java Program to Illustrate Wrong Way Of Copying an Array // Input array int a[] = { 1, 8, 3 }; // Creating an array b[] of same size as a[] int b[] = new int[a.length]; // Doesn't copy elements of a[] to b[], only makes // b refer to same location b = a;> Ausgabe:

Ausgabeerklärung: Wenn wir b = a machen, weisen wir dem Array tatsächlich eine Referenz zu. Wenn wir also eine Änderung an einem Array vornehmen, wird diese auch in anderen Arrays widergespiegelt, da sowohl a als auch b auf denselben Ort verweisen. Wir können es auch mit dem unten gezeigten Code überprüfen:
Beispiel:
Java
// A Java program to demonstrate that simply> // assigning one array reference is incorrect> public> class> Test {> >public> static> void> main(String[] args)> >{> >int> a[] = {>1>,>8>,>3> };> > >// Create an array b[] of same size as a[]> >int> b[] =>new> int>[a.length];> > >// Doesn't copy elements of a[] to b[],> >// only makes b refer to same location> >b = a;> > >// Change to b[] will also reflect in a[]> >// as 'a' and 'b' refer to same location.> >b[>0>]++;> > >System.out.println(>'Contents of a[] '>);> >for> (>int> i =>0>; i System.out.print(a[i] + ' '); System.out.println('
Contents of b[] '); for (int i = 0; i System.out.print(b[i] + ' '); } }> |
>
>Ausgabe
Contents of a[] 2 8 3 Contents of b[] 2 8 3>
Methoden:
Wir haben gesehen, dass interne Arbeiten beim Kopieren von Elementen und Randfällen berücksichtigt werden müssen, nachdem die oben generierten Fehler behoben wurden. Daher können wir jetzt die richtigen Möglichkeiten zum Kopieren von Arrays vorschlagen, wie unten aufgeführt:
- Iterieren Sie jedes Element des angegebenen Originalarrays und kopieren Sie jeweils ein Element
- Verwendung der clone()-Methode
- Verwenden der Methode arraycopy()
- Verwendung der Methode copyOf() der Klasse Arrays
- Verwendung der Methode copyOfRange() der Klasse Arrays
Methode 1: Iterieren Sie jedes Element des angegebenen Originalarrays und kopieren Sie jeweils ein Element. Durch die Verwendung dieser Methode wird garantiert, dass Änderungen an b das ursprüngliche Array a nicht verändern, wie im folgenden Beispiel gezeigt:
Beispiel:
Java
// Java program to demonstrate copying by> // one by one assigning elements between arrays> > // Main class> public> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Input array a[]> >int> a[] = {>1>,>8>,>3> };> > >// Create an array b[] of same size as a[]> >int> b[] =>new> int>[a.length];> > >// Copying elements of a[] to b[]> >for> (>int> i =>0>; i b[i] = a[i]; // Changing b[] to verify that // b[] is different from a[] b[0]++; // Display message only System.out.println('Contents of a[] '); for (int i = 0; i System.out.print(a[i] + ' '); // Display message only System.out.println('
Contents of b[] '); for (int i = 0; i System.out.print(b[i] + ' '); } }> |
>
>Ausgabe
Java-Benutzereingabe
Contents of a[] 1 8 3 Contents of b[] 2 8 3>
Methode 2: Verwendung der Clone()-Methode
Bei der vorherigen Methode mussten wir das gesamte Array durchlaufen, um eine Kopie zu erstellen. Können wir es besser machen? Ja, wir können die Klonmethode in Java verwenden.
Beispiel:
Java
// Java program to demonstrate Copying of Array> // using clone() method> > // Main class> public> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Input array a[]> >int> a[] = {>1>,>8>,>3> };> > >// Copying elements of a[] to b[]> >int> b[] = a.clone();> > >// Changing b[] to verify that> >// b[] is different from a[]> >b[>0>]++;> > >// Display message for better readability> >System.out.println(>'Contents of a[] '>);> > >for> (>int> i =>0>; i System.out.print(a[i] + ' '); // Display message for better readability System.out.println('
Contents of b[] '); for (int i = 0; i System.out.print(b[i] + ' '); } }> |
>
>Ausgabe
Contents of a[] 1 8 3 Contents of b[] 2 8 3>
Methode 3: Verwenden der Methode arraycopy()
Wir können auch verwenden System.arraycopy() Methode. Das System ist im Paket java.lang enthalten. Seine Signatur lautet wie folgt:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)>
Parameter:
- src bezeichnet das Quellarray.
- srcPos ist der Index, ab dem der Kopiervorgang beginnt.
- Start bezeichnet das Zielarray
- ZielPos ist der Index, von dem aus die kopierten Elemente im Zielarray platziert werden.
- Länge ist die Länge des zu kopierenden Subarrays.
Beispiel:
Java
// Java program to demonstrate array> // copy using System.arraycopy()> > // Main class> public> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Custom input array> >int> a[] = {>1>,>8>,>3> };> > >// Creating an array b[] of same size as a[]> >int> b[] =>new> int>[a.length];> > >// Copying elements of a[] to b[]> >System.arraycopy(a,>0>, b,>0>,>3>);> > >// Changing b[] to verify that> >// b[] is different from a[]> >b[>0>]++;> > >// Display message only> >System.out.println(>'Contents of a[] '>);> > >for> (>int> i =>0>; i System.out.print(a[i] + ' '); // Display message only System.out.println('
Contents of b[] '); for (int i = 0; i System.out.print(b[i] + ' '); } }> |
>
>Ausgabe
Contents of a[] 1 8 3 Contents of b[] 2 8 3>
Methode 4: Verwendung der Methode copyOf() der Klasse Arrays
Wenn wir die ersten Elemente eines Arrays oder eine vollständige Kopie des Arrays kopieren möchten, können Sie diese Methode verwenden.
Syntax:
public static int[] copyOf?(int[] original, int newLength)>
Parameter:
- Ursprüngliches Array
- Länge des Arrays, das kopiert werden soll.
Beispiel:
Liste der Religionen
Java
// Java program to demonstrate array> // copy using Arrays.copyOf()> > // Importing Arrays class from utility class> import> java.util.Arrays;> > // Main class> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Custom input array> >int> a[] = {>1>,>8>,>3> };> > >// Create an array b[] of same size as a[]> >// Copy elements of a[] to b[]> >int> b[] = Arrays.copyOf(a,>3>);> > >// Change b[] to verify that> >// b[] is different from a[]> >b[>0>]++;> > >System.out.println(>'Contents of a[] '>);> > >// Iterating over array. a[]> >for> (>int> i =>0>; i System.out.print(a[i] + ' '); System.out.println('
Contents of b[] '); // Iterating over array b[] for (int i = 0; i System.out.print(b[i] + ' '); } }> |
>
>Ausgabe
Contents of a[] 1 8 3 Contents of b[] 2 8 3>
Methode 5: Verwendung der Methode copyOfRange() der Klasse Arrays
Diese Methode kopiert den angegebenen Bereich des angegebenen Arrays in ein neues Array.
public static int[] copyOfRange?(int[] original, int from, int to)>
Parameter:
- Ursprüngliches Array, aus dem ein Bereich kopiert werden soll
- Anfangsindex des zu kopierenden Bereichs
- Endgültiger Index des zu kopierenden Bereichs, exklusiv
Beispiel:
Java
// Java program to demonstrate array> // copy using Arrays.copyOfRange()> > // Importing Arrays class from utility package> import> java.util.Arrays;> > // Main class> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Custom input array> >int> a[] = {>1>,>8>,>3>,>5>,>9>,>10> };> > >// Creating an array b[] and> >// copying elements of a[] to b[]> >int> b[] = Arrays.copyOfRange(a,>2>,>6>);> > >// Changing b[] to verify that> >// b[] is different from a[]> > >// Iterating over array a[]> >System.out.println(>'Contents of a[] '>);> >for> (>int> i =>0>; i System.out.print(a[i] + ' '); // Iterating over array b[] System.out.println('
Contents of b[] '); for (int i = 0; i System.out.print(b[i] + ' '); } }> |
>
>Ausgabe
Contents of a[] 1 8 3 5 9 10 Contents of b[] 3 5 9 10>
Lassen Sie uns abschließend noch darüber sprechen Übersicht über die oben genannten Methoden:
- Die bloße Vergabe von Referenzen ist falsch
- Das Array kann kopiert werden, indem über ein Array iteriert und Elemente nacheinander zugewiesen werden.
- Wir können die Iteration über Elemente vermeiden mit clone() oder System.arraycopy()
- clone() erstellt ein neues Array derselben Größe, aber System.arraycopy() kann zum Kopieren von einem Quellbereich in einen Zielbereich verwendet werden.
- System.arraycopy() ist schneller als clone(), da es Java Native Interface verwendet
- Wenn Sie die ersten Elemente eines Arrays oder eine vollständige Kopie eines Arrays kopieren möchten, können Sie die Methode Arrays.copyOf() verwenden.
- Arrays.copyOfRange() wird verwendet, um einen angegebenen Bereich eines Arrays zu kopieren. Wenn der Startindex nicht 0 ist, können Sie mit dieser Methode ein Teilarray kopieren.