Comment copier un tableau en Java

Comment copier un tableau en Java

Les méthodes décrites ci-dessous ne s'appliquent qu'aux tableaux à une dimension. Avant de parler des différentes façons de copier un tableau en Java, nous allons vous montrer comment NE PAS copier un tableau.

Comment NE PAS copier un tableau en Java

Les tableaux en Java sont des objets. Si vous essayez de les traiter comme des variables ... eh bien vous pouvez (!) Maiswhat you are really copying is the reference!. L'exemple ci-dessous explique cette déclaration.

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));

    }

}

Sortie:

[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 hérite des méthodes de la classeObject, etclone en fait partie. Si vous devez copier un tableau tel quel, c'est la méthode que vous devez utiliser.

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));

    }

}

Sortie:

[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()

Dans la classeArrays, il existe deux méthodes qui copient un tableau entièrement ou partiellement. Voici un exemple de la méthodecopyOf().

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));

    }

}

Sortie:

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

3. Arrays.copyOfRange()

Et ceci est un exemple de méthode copyOfRange ().

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));
    }
}

Sortie:

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

4. System.arraycopy()

AvecSystem.arraycopy(), vous pouvez contrôler la plage d'éléments du tableau source que vous souhaitez copier,
et la position destinée.

Vérifiez la signature deSystem.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));

    }
}

Sortie:

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
N'oubliez pas d'entourer votre code avec try catch pour gérer les exceptions levées