É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.