So kopieren Sie ein Array in Java

So kopieren Sie ein Array in Java

Die nachfolgend beschriebenen Methoden sind nur auf eindimensionale Arrays anwendbar. Bevor wir über die verschiedenen Möglichkeiten zum Kopieren eines Arrays in Java sprechen, zeigen wir Ihnen, wie Sie ein Array NICHT kopieren.

So kopieren Sie ein Array NICHT in Java

Arrays in Java sind Objekte. Wenn Sie versuchen, sie als Variablen zu behandeln, können Sie (!) Aberwhat you are really copying is the reference!. Das folgende Beispiel erläutert diese Aussage.

HowNOTtoCopyAnArray.java

package com.techfou.copyarray;

import java.util.Arrays;

public class HowNOTtoCopyAnArray {

    public static void main(String[] args){

        int[] x = {1, 2, 3, 4, 5};
        int[] y = x; //don't copy array like this!

        System.out.println(Arrays.toString(x));
        System.out.println(Arrays.toString(y)+"\n");

        x[1] = 22; // y[1] will display 22! same reference

        System.out.println(Arrays.toString(x));
        System.out.println(Arrays.toString(y)+"\n");

        y[4] = 55; // x[4] will display 55!

        System.out.println(Arrays.toString(x));
        System.out.println(Arrays.toString(y));

    }

}

Ausgabe:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

[1, 22, 3, 4, 5]
[1, 22, 3, 4, 5]

[1, 22, 3, 4, 55]
[1, 22, 3, 4, 55]

1. Object.clone()

Arrays erben Methoden von der KlasseObject, undclone ist eine davon. Wenn Sie ein Array so kopieren müssen, wie es ist, sollten Sie diese Methode verwenden.

CloneArray.java

package com.techfou.copyarray;

import java.util.Arrays;

public class CloneArray {

    public static void main(String[] args){

        int[] x = {1, 2, 3, 4, 5};
        int[] y = x.clone();

        System.out.println(Arrays.toString(x));
        System.out.println(Arrays.toString(y)+"\n");

        x[1] = 22;

        System.out.println(Arrays.toString(x));
        System.out.println(Arrays.toString(y)+"\n");

        y[4] = 55;

        System.out.println(Arrays.toString(x));
        System.out.println(Arrays.toString(y));

    }

}

Ausgabe:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

[1, 22, 3, 4, 5]
[1, 2, 3, 4, 5]

[1, 22, 3, 4, 5]
[1, 2, 3, 4, 55]

2. Arrays.copyOf()

In der KlasseArraysgibt es zwei Methoden, mit denen ein Array ganz oder teilweise kopiert wird. Hier ist ein Beispiel für die Methode voncopyOf().

ArraysCopyOfMethod.java

package com.example.copyarray;

import java.util.Arrays;

public class ArraysCopyOfMethod {

    public static void main(String[] args){

        String[] x = {"one", "two", "three", "four", "five"};
        String[] y = Arrays.copyOf(x, x.length);
        String[] z = Arrays.copyOf(x, 3); //will copy the 3 first elements of array x

        System.out.println("Array x: " + Arrays.toString(x));
        System.out.println("Array y: " + Arrays.toString(y));
        System.out.println("Array z: " + Arrays.toString(z));

    }

}

Ausgabe:

Array x: [one, two, three, four, five]
Array y: [one, two, three, four, five]
Array z: [one, two, three]

3. Arrays.copyOfRange()

Dies ist ein Beispiel für die copyOfRange () -Methode.

ArraysCopyOfRangeMethod.java

package com.example.copyarray;

import java.util.Arrays;

public class ArraysCopyOfRangeMethod {

    public static void main(String[] args){
        String[] x = {"one", "two", "three", "four", "five"};
        String[] y = Arrays.copyOfRange(x, 0, x.length); //full copy of the array
        String[] z = Arrays.copyOfRange(x, x.length-2, x.length); //copy only the last 2 elements


        System.out.println("Array x: " + Arrays.toString(x));
        System.out.println("Array y: " + Arrays.toString(y));
        System.out.println("Array z: " + Arrays.toString(z));
    }
}

Ausgabe:

Array x: [one, two, three, four, five]
Array y: [one, two, three, four, five]
Array z: [four, five]

4. System.arraycopy()

MitSystem.arraycopy() können Sie den Bereich der Elemente aus dem zu kopierenden Quellarray,
und der Zielposition steuern.

Überprüfen Sie die Signatur vonSystem.arraycopy(JavaDoc):

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

SystemArrayCopy.java

package com.example.copyarray;

import java.util.Arrays;

public class SystemArrayCopy {

    public static void main(String[] args){

        String[] x = {"one", "two", "three", "four", "five"};
        String[] y = new String[2];
        System.arraycopy(x, 3, y, 0, 2);

        System.out.println("Array x: " + Arrays.toString(x));
        System.out.println("Array y: " + Arrays.toString(y) + "\n");

        Object[] z = new Object[5];
        System.arraycopy(x, 0, z, 0, 5);
        System.out.println("Array z: " + Arrays.toString(z)+"\n");

        Integer[] w = {3, 4, 5};
        System.out.println("Array w: " + Arrays.toString(w));

        //copy from the second value (1) of array w to z and place in the fourth place (3) the 2 values
        System.arraycopy(w, 1, z, 3, 2);
        System.out.println("Array z: " + Arrays.toString(z));

    }
}

Ausgabe:

Array x: [one, two, three, four, five]
Array y: [four, five]

Array z: [one, two, three, four, five]

Array w: [3, 4, 5]
Array z: [one, two, three, 4, 5]

Note
Vergessen Sie nicht, Ihren Code mit try catch zu umgeben, um ausgelöste Ausnahmen zu behandeln