logo

Copie de tableau en Java

Étant donné un tableau, nous devons copier ses éléments dans un tableau différent. Pour un utilisateur naïf, la méthode ci-dessous vient à l'esprit, mais elle est incorrecte, comme illustré ci-dessous :

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

Sortir:



Explication de la sortie : Lorsque nous faisons b = a, nous attribuons en fait une référence au tableau. Par conséquent, si nous apportons une modification à un tableau, cela se reflétera également dans d’autres tableaux car a et b font référence au même emplacement. Nous pouvons également le vérifier avec le code indiqué ci-dessous :

Exemple:



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] + ' '); } }>

>

>

Sortir

Contents of a[] 2 8 3 Contents of b[] 2 8 3>

Méthodes :

Nous avons constaté que le travail interne lors de la copie d'éléments et de cas extrêmes devait être pris en compte après avoir résolu les erreurs générées ci-dessus. Nous pouvons donc maintenant proposer des méthodes correctes pour copier un tableau, comme indiqué ci-dessous :

  1. Itérer chaque élément du tableau d'origine donné et copier un élément à la fois
  2. Utilisation de la méthode clone()
  3. Utilisation de la méthode arraycopy()
  4. Utilisation de la méthode copyOf() de la classe Arrays
  5. Utilisation de la méthode copyOfRange() de la classe Arrays

Méthode 1 : Itérer chaque élément du tableau d'origine donné et copier un élément à la fois. Avec l'utilisation de cette méthode, il garantit que toute modification apportée à b n'altèrera pas le tableau d'origine a, comme le montre l'exemple ci-dessous :

Exemple:

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] + ' '); } }>

>

>

Sortir

dictionnaire de tri python
Contents of a[] 1 8 3 Contents of b[] 2 8 3>

Méthode 2 : Utilisation de la méthode Clone()

Dans la méthode précédente, nous devions parcourir l’ensemble du tableau pour en faire une copie, pouvons-nous faire mieux ? Oui, nous pouvons utiliser la méthode clone en Java .

Exemple:

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] + ' '); } }>

>

>

Sortir

Contents of a[] 1 8 3 Contents of b[] 2 8 3>

Méthode 3 : Utilisation de la méthode arraycopy()

Nous pouvons également utiliser Système.arraycopy() Méthode. Le système est présent dans le package java.lang. Sa signature est la suivante :

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)>

Paramètres:

  • src désigne le tableau source.
  • srcPos est l'index à partir duquel la copie commence.
  • commencer désigne le tableau de destination
  • destPos est l'index à partir duquel les éléments copiés sont placés dans le tableau de destination.
  • longueur est la longueur du sous-tableau à copier.

Exemple:

Java




tableau en 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] + ' '); } }>

>

>

Sortir

Contents of a[] 1 8 3 Contents of b[] 2 8 3>

Méthode 4 : Utilisation de la méthode copyOf() de la classe Arrays

Si nous souhaitons copier les premiers éléments d’un tableau ou une copie complète du tableau, vous pouvez utiliser cette méthode.

Syntaxe:

public static int[] copyOf?(int[] original, int newLength)>

Paramètres:

  • Tableau d'origine
  • Longueur du tableau à copier.

Exemple:

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] + ' '); } }>

>

>

Sortir

Contents of a[] 1 8 3 Contents of b[] 2 8 3>

Méthode 5 : Utilisation de la méthode copyOfRange() de la classe Arrays

Cette méthode copie la plage spécifiée du tableau spécifié dans un nouveau tableau.

public static int[] copyOfRange?(int[] original, int from, int to)>

Paramètres:

  • Tableau d'origine à partir duquel une plage doit être copiée
  • Index initial de la plage à copier
  • Index final de la plage à copier, exclusif

Exemple:

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] + ' '); } }>

>

>

Sortir

Contents of a[] 1 8 3 5 9 10 Contents of b[] 3 5 9 10>

Enfin, parlons de aperçu des méthodes ci-dessus :

  • Attribuer simplement des références est une erreur
  • Le tableau peut être copié en itérant sur un tableau et en attribuant des éléments un par un.
  • Nous pouvons éviter les itérations sur les éléments en utilisant clone() ou System.arraycopy()
  • clone() crée un nouveau tableau de même taille, mais Système.arraycopy() peut être utilisé pour copier d’une plage source vers une plage de destination.
  • System.arraycopy() est plus rapide que clone() car il utilise l'interface native Java
  • Si vous souhaitez copier les premiers éléments d'un tableau ou une copie complète d'un tableau, vous pouvez utiliser la méthode Arrays.copyOf().
  • Arrays.copyOfRange() est utilisé pour copier une plage spécifiée d'un tableau. Si l'index de départ n'est pas 0, vous pouvez utiliser cette méthode pour copier un tableau partiel.