É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 :
- Itérer chaque élément du tableau d'origine donné et copier un élément à la fois
- Utilisation de la méthode clone()
- Utilisation de la méthode arraycopy()
- Utilisation de la méthode copyOf() de la classe Arrays
- 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.