Cloner des tableaux Java

Farkhanda Athar 12 octobre 2023
  1. Copie manuelle d’un tableau Java à l’aide de la boucle for en Java
  2. Utilisation de Arrays.copyOf() pour cloner un tableau Java
  3. Utilisation de Arrays.copyOfRange() pour cloner un tableau Java
  4. Utilisation de Object.clone() pour cloner un tableau Java
  5. Utilisation de System.arraycopy() pour cloner un tableau Java
Cloner des tableaux Java

Les tableaux Java peuvent être copiés dans un autre tableau des manières suivantes.

  • Utilisation de l’affectation de variable : Cette technique a ses inconvénients car toute modification apportée à un élément du tableau se répercute aux deux endroits.
  • Créez un tableau de la même taille et copiez chaque élément.
  • Utiliser la technique du clonage sur le tableau. Les méthodes de clonage créent un tout nouveau tableau de taille similaire.
  • Utiliser la technique System.arraycopy(). arraycopy est une méthode pour copier une partie spécifique d’un tableau.

Copie manuelle d’un tableau Java à l’aide de la boucle for en Java

Typiquement, au moment où nous voulons copier des variables comme a et b, nous effectuons l’opération de copie de la manière suivante :

public class Main {
  public static void main(String[] args) {
    int IArray[] = {24, 45, 56};

    System.out.println("Before assignment the values of IArray[] are:");
    for (int i = 0; i < IArray.length; i++) System.out.print(IArray[i] + " ");

    int CArray[] = new int[IArray.length];

    CArray = IArray;
    CArray[1]++;

    System.out.println("\nElements of IArray[]:");
    for (int i = 0; i < IArray.length; i++) System.out.print(IArray[i] + " ");

    System.out.println("\nElements of CArray[]:");
    for (int i = 0; i < CArray.length; i++) System.out.print(CArray[i] + " ");
  }
}

Production:

Before assignment the values of IArray[] are:
24 45 56 
Elements of IArray[]:
24 46 56 
Elements of CArray[]:
24 46 56 

Il ne sera pas efficace si vous appliquez cette même procédure aux tableaux.

Utilisation de Arrays.copyOf() pour cloner un tableau Java

Cette méthode qui est Arrays.copyOf() est utile pour une utilisation interne de la procédure System.arraycopy(). Bien qu’elle ne soit pas aussi efficace que la copie de tableau, elle peut dupliquer tout ou partie de tableaux, de la même manière que la méthode de copie de tableau. La méthode copyOf() est un élément du package java.util, et fait partie de la classe Arrays. L’idée de base derrière cette méthode est :

public class Main {
  public static void main(String args[]) {
    int[] OArray = new int[] {11, 12, 13};

    System.out.println("Original Arrays elements are");
    for (int i = 0; i < OArray.length; i++) System.out.print(OArray[i] + " ");

    int[] CArray = Arrays.copyOf(OArray, 5);

    CArray[3] = 22;
    CArray[4] = 66;

    System.out.println("\nNew array after copying and modification are:");
    for (int i = 0; i < copy.length; i++) System.out.print(copy[i] + " ");
  }
}

Production:

Original Arrays elements are
11 12 13 
New array after copying and modification are
11 12 13 22 66 

Ici,

  • original : Le tableau qui sera copié dans le tableau nouvellement créé.
  • newLength : Longueur du tableau copié qui sera retourné.

Ainsi, cette méthode crée une copie exacte du tableau fourni comme premier argument de la taille spécifiée en remplissant ou en tronquant la longueur en ajoutant 0 pour créer le nouveau tableau. Cela signifie que si la taille du tableau copié est supérieure à ce qui était à l’origine dans le tableau 0, les éléments restants sont remplacés.

Utilisation de Arrays.copyOfRange() pour cloner un tableau Java

La méthode Arrays.copyOfRange() est spécialement conçue pour copier des portions de tableaux. Similaire à la méthode toCopyOf(), la méthode utilise la technique System.arraycopy(). L’idée de base de la procédure Arrays.copyOfRange() peut être décrite comme suit :

import java.util.Arrays;

class Main {
  public static void main(String args[]) {
    int IArray[] = {100, 200, 300, 400, 500};

    int[] CArray = Arrays.copyOfRange(IArray, 2, 6);
    System.out.println("Array within the index range : " + Arrays.toString(CArray));

    int[] CArray1 = Arrays.copyOfRange(IArray, 4, IArray.length + 3);

    System.out.println("Array copied within the indexed range: " + Arrays.toString(CArray1));
  }
}

Production:

Array within the index range : [300, 400, 500, 0]
Array copied within the indexed range: [500, 0, 0, 0]

Ici,

  • original : le tableau d’une plage en cours de copie.
  • from : l’indice du tableau à copier inclus.
  • to : l’Index de la Gamme à copier, et exclusif.

Utilisation de Object.clone() pour cloner un tableau Java

Les baies Java implémentent en interne une interface Cloneable, il est donc facile de cloner des baies Java. Il est possible de cloner des tableaux unidimensionnels et bidimensionnels. Si vous copiez un tableau à une dimension, cela crée une réplique étendue des éléments du tableau qui copie les valeurs.

D’autre part, lorsque vous copiez des tableaux bidimensionnels ou multidimensionnels, une petite copie des éléments est créée, c’est-à-dire que la seule information de référence est copiée. Ce clonage est réalisé à l’aide de la méthode clone() proposée aux baies.

class Main {
  public static void main(String args[]) {
    int NArray[] = {50, 100, 150, 200, 250, 300};

    int CArray[] = NArray.clone();

    System.out.println("Original Num Array are:");
    for (int i = 0; i < NArray.length; i++) {
      System.out.print(NArray[i] + " ");
    }
    System.out.println();

    System.out.println("Cloned Num Array are:");
    for (int i = 0; i < CArray.length; i++) {
      System.out.print(CArray[i] + " ");
    }
    System.out.println("\n");

    System.out.print("NArray == CArray = ");
    System.out.println(NArray == CArray);
  }
}

Production:

Original Num Array are:
50 100 150 200 250 300 
Cloned Num Array are:
50 100 150 200 250 300 

NArray == CArray = false

Utilisation de System.arraycopy() pour cloner un tableau Java

La classe System de Java fournit une option appelée ArrayCopy qui vous permet de copier des éléments d’un tableau dans un autre. Le modèle le plus courant pour cette méthode est :

class Main {
  public static void main(String[] args) {
    // declaring a source array
    char[] Oarray = {'I', 'L', 'o', 'v', 'e', 'M', 'y', 'C', 'o', 'u', 'n', 't', 'r', 'y'};

    char[] Farray = new char[14];

    System.arraycopy(Oarray, 0, Farray, 0, 14);
    System.out.println("Origional Array Elements are:" + String.valueOf(Oarray));

    System.out.println("Arrays after copying elements are:" + String.valueOf(Farray));
  }
}

Production:

Origional Array Elements are:ILoveMyCountry
Arrays after copying elements are:ILoveMyCountry

Ici,

  • src_array : Tableau source à partir duquel les éléments sont copiés.
  • src_Pos : L’emplacement au sein du tableau source est le point de départ de la copie.
  • dest_array : Le tableau dans lequel se trouve la destination dans lequel les éléments seront copiés.
  • dest_Pos : Position de départ dans le tableau de destination des éléments à copier.
  • length : longueur du tableau à copier.

Article connexe - Java Array