java copy array how copy clone an array java
Ce didacticiel sur la copie et le clonage de tableaux décrit les différentes méthodes de copie d'un tableau en Java:
Ici, nous allons discuter de l'opération de copie des tableaux Java. Java propose différentes manières de faire des copies d'éléments de tableau. Comme nous le savons, en Java, les tableaux peuvent contenir des éléments de types primitifs ou des objets ou des références.
Lors de la création de copies de types primitifs, la tâche est assez facile, mais en ce qui concerne les objets ou les références, vous devez faire attention à savoir si la copie est profonde ou superficielle.
=> Jetez un œil au guide du débutant Java ici.
La copie superficielle fait une copie de l'élément. Ce n'est pas un problème lorsque des types de données primitifs sont impliqués. Mais lorsque des références sont impliquées, une copie superficielle copiera simplement la valeur et non les informations sous-jacentes.
Ainsi, même si vous avez fait des copies d'éléments, une modification dans une copie se reflétera également dans une autre copie lorsque les emplacements de mémoire sont partagés. Pour éviter cela, vous devez opter pour une copie complète dans laquelle les emplacements de mémoire ne sont pas partagés.
Ce que vous apprendrez:
Copier et cloner des tableaux Java
Java vous permet de copier des tableaux à l'aide de la méthode de copie directe fournie par java.util ou de la classe System. Il fournit également une méthode de clonage utilisée pour cloner un tableau entier.
Dans ce didacticiel, nous aborderons les méthodes suivantes de copie et de clonage de tableaux.
- Copie manuelle à l'aide de la boucle for
- Utilisation de System.arraycopy ()
- Utilisation de Arrays.copyOf ()
- Utilisation de Arrays.copyOfRange ()
- Utiliser Object.clone ()
Explorons!!
Copie manuelle à l'aide de la boucle For
Normalement, lorsque nous copions des variables, par exemple, a et b, nous effectuons l'opération de copie comme suit:
a = b;
Cela ne fonctionnera pas correctement si nous appliquons la même méthode aux tableaux.
Voyons un exemple de programmation.
public class Main { public static void main(String() args) { int intArray() = {12,15,17}; //print original intArray System.out.println('Contents of intArray() before assignment:'); for (int i=0; i Production:

Dans le programme ci-dessus, il y a deux tableaux, à savoir intArray et copyArray. La tâche consiste à copier le contenu de intArray dans copyArray. Pour ce faire, l'instruction copyArray = intArray est introduite. Ce qui est fait ici, c'est que les références du tableau sont attribuées. Il ne s'agit donc pas d'une copie réelle.
En conséquence de l'instruction ci-dessus, l'emplacement mémoire de l'intArray est également partagé par le copyArray. Désormais, lorsque l'élément copyArray est incrémenté, cette modification est également reflétée dans l'intArray. Ceci est indiqué dans la sortie.
Pour surmonter ce problème, nous utilisons une méthode de copie du tableau en utilisant la boucle for. Ici, chaque élément du tableau d'origine est copié dans le nouveau tableau à l'aide d'une boucle for.
Ce programme est illustré ci-dessous.
public class Main { public static void main(String() args) { int intArray() = {12,15, 17}; // define an array copyArray to copy contents of intArray int copyArray() = new int(intArray.length); // copy contents of intArray to copyArray for (int i=0; i Production:

Ici, nous avons modifié le programme précédent pour inclure la boucle for et à l'intérieur de la boucle for, nous affectons chaque élément de intArray à l'élément correspondant de copyArray. De cette façon, les éléments sont effectivement copiés. Ainsi, lorsqu'un tableau est modifié, les changements ne sont pas reflétés dans un autre tableau.
Utilisation de System.arraycopy ()
La classe System de Java possède une méthode appelée «ArrayCOpy» qui vous permet de copier des éléments d’un tableau dans un autre tableau.
Le prototype général de cette méthode est le suivant:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Ici,
- src_array => Tableau source à partir duquel le contenu doit être copié.
- src_Pos => La position dans le tableau source à partir de laquelle la copie commencera.
- dest_array => Tableau de destination dans lequel les éléments doivent être copiés.
- dest_Pos => Position de départ dans le tableau de destination des éléments à copier.
- longueur => Longueur du tableau à copier.
Comprenons cette méthode avec un exemple.
class Main { public static void main(String() args) { //declaring a source array char() src_array = { 'S','o','f','t','w','a','r','e','T','e','s','t','i','n','g','H','e','l','p'}; char() dest_array = new char(19); System.arraycopy(src_array, 0, dest_array, 0,19); System.out.println('Source array:' + String.valueOf(src_array)); System.out.println('Destination array after arraycopy:'+ String.valueOf(dest_array)); } }
Production:

Dans le programme ci-dessus, nous utilisons la méthode «arraycopy» pour copier un tableau dans un autre tableau. Vous pouvez voir l'appel à la méthode arraycopy. Nous copions le tableau source depuis le début (0elocation) et copiez l'ensemble du tableau.
Enfin, nous affichons l'équivalent en chaîne des tableaux source et destination.
Avec la méthode arraycopy, vous pouvez copier même des tableaux partiels car elle prend les positions d'élément de début et de fin comme arguments. Cette méthode fait une copie superficielle des éléments du tableau.
Utilisation de Arrays.copyOf ()
La méthode Arrays.copyOf () utilise en interne la méthode System.arraycopy (). Bien que ce ne soit pas aussi efficace que arraycopy, il peut être utilisé pour copier un tableau complet ou partiel, tout comme la méthode arraycopy.
La méthode ‘copyOf ()’ fait partie du package java.util et appartient à la classe “Arrays”.
Le prototype de cette méthode est le suivant:
public static int() copyOf(int() original_array,int newLength)
Où,
- original: Le tableau à copier dans le nouveau tableau.
- newLength: La longueur du tableau copié à renvoyer.
Ainsi, cette méthode fait une copie du tableau fourni dans le premier argument à la longueur spécifiée en tronquant ou en complétant la longueur avec 0 vers le nouveau tableau. Cela signifie que si la longueur du tableau copié est supérieure au tableau d'origine, les 0 sont remplacés pour les éléments restants.
Le programme donné ci-dessous montre un exemple de la méthode copyOf.
importjava.util.Arrays; public class Main { public static void main(String args()) { // define original array int() even_Array = new int() {2,4,6,8}; System.out.println('Original Array:' + Arrays.toString(even_Array)); // copying array even_Array to copy_Array int() copy_Array = Arrays.copyOf(even_Array,5); System.out.println('Copied Array:' + Arrays.toString(copy_Array)); // assign value to unassigned element of copied array copy_Array(4) = 10; System.out.println('Copied and modified Array:' + Arrays.toString(copy_Array)); } }
Production:

Dans le programme ci-dessus, nous copions le even_Array de longueur 4 en utilisant la méthode copyOf. Le deuxième argument fourni est 5. Par conséquent, le nouveau tableau copié contient 5 éléments. Les quatre premiers sont les mêmes que le tableau d'origine et le cinquième élément est 0 car copyOf le complète car la longueur du tableau d'origine est inférieure à celle du nouveau tableau.
Utilisation de Arrays.copyOfRange ()
La méthode Arrays.copyOfRange () est spécifiquement utilisée lorsque vous souhaitez copier des tableaux partiels. Comme la méthode copyOf (), cette méthode utilise également en interne la méthode System.arraycopy ().
Le prototype de la méthode Arrays.copyOfRange () est le suivant:
public static short() copyOfRange(short() original, int from, int to)
où,
- original: Tableau à partir duquel une plage doit être copiée.
- de: Index initial de la plage à copier, inclus.
- à: L'index final de la plage à copier, exclusif.
Un exemple d'implémentation de la méthode copyOfRange est illustré ci-dessous.
import java.util.Arrays; class Main { public static void main(String args()) { int intArray() = { 10,20,30,40,50 }; // to index is within the range int() copyArray = Arrays.copyOfRange(intArray, 2, 6); System.out.println('Array copy with both index within the range: ' + Arrays.toString(copyArray)); //to index is out of range int() copy1 = Arrays.copyOfRange(intArray, 4, intArray.length + 3); System.out.println('Array copy with to index out of range: ' + Arrays.toString(copy1)); } }
Production:

Utiliser Object.clone ()
Le tableau Java implémente en interne une interface clonable et il est donc facile de cloner un tableau Java. Vous pouvez cloner des tableaux unidimensionnels ou bidimensionnels. Lorsque vous clonez un tableau unidimensionnel, il effectue une copie complète des éléments du tableau qui copie les valeurs.
D'autre part, lorsque vous clonez des tableaux bidimensionnels ou multidimensionnels, une copie superficielle des éléments est effectuée, c'est-à-dire que seules les références sont copiées. Ce clonage de tableaux est effectué par la méthode «Clone ()» fournie par les tableaux.
Une copie complète des tableaux 1-D à la suite du clonage peut être représentée comme suit:

Maintenant, implémentons le clonage de tableau 1-D dans un programme Java.
class Main { public static void main(String args()) { int num_Array() = {5,10,15,20,25,30}; int clone_Array() = num_Array.clone(); System.out.println('Original num_Array:'); for (int i = 0; i Comme vous pouvez le voir dans la sortie, l'expression pour vérifier l'égalité des deux tableaux renvoie false. En effet, le clonage d'un tableau unidimensionnel entraîne une copie complète dans laquelle les valeurs sont copiées dans un nouveau tableau et pas simplement des références.
Questions fréquemment posées
Q # 1) Comment faire une copie d'un tableau en Java?
Répondre: Il existe différentes méthodes pour copier un tableau.
- Vous pouvez utiliser une boucle for et copier les éléments l'un dans l'autre un par un.
- Utilisez la méthode de clonage pour cloner un tableau.
- Utilisez la méthode arraycopy () de la classe System.
- Utilisez les méthodes copyOf () ou copyOfRange () de la classe Arrays.
Q # 2) Comment attribuez-vous un tableau à un autre?
Répondre: Vous pouvez affecter le tableau à un autre à l'aide d'un simple opérateur d'affectation (=). Vous devez vous assurer que les deux tableaux sont du même type de données et ont une dimension identique.
Q # 3) Qu'est-ce qu'une copie superficielle et une copie profonde?
Répondre: Dans la copie superficielle, seuls les attributs des objets ou des tableaux en question sont copiés. Ainsi, toute modification apportée au tableau copié sera reflétée dans l'original. Le clonage Java est un exemple de copie superficielle.
comment ouvrir les fichiers dat dans windows
Une copie profonde est celle dans laquelle nous avons besoin d'une copie complète de l'objet afin que lorsque nous clonons ou copions cet objet, il s'agisse d'une copie indépendante. Lorsque des types primitifs ou intégrés sont impliqués, il n'y a aucune différence entre la copie superficielle et la copie profonde.
Q # 4) Que fait un clone de tableau?
Répondre: La méthode de clonage des tableaux est utilisée pour copier les attributs d'un objet dans un autre. Il utilise une copie superficielle pour ce faire.
Q # 5) Pouvez-vous stocker un tableau dans un tableau?
Répondre: Les tableaux peuvent contenir des tableaux fournis avec les éléments du même type (primitif ou objet). Cela signifie que vous ne pouvez pas stocker un tableau d'entiers dans un tableau de chaînes.
Conclusion
Dans ce didacticiel, nous avons exploré les tableaux de copie et de clonage de tableaux en Java. Nous avons vu diverses méthodes / approches pour copier et cloner un tableau.
Notez que la plupart de ces méthodes implémentent une copie superficielle. Pour les types de données primitifs, les copies superficielles et profondes ne diffèrent pas. Mais lorsqu'un tableau contient des objets ou des références, le programmeur doit implémenter une copie complète selon les exigences.
Dans nos didacticiels suivants, nous continuons à explorer davantage les tableaux Java.
=> Lisez la série de formations Easy Java.
lecture recommandée
- Tutoriel Java Array Length avec des exemples de code
- Java Generic Array - Comment simuler des tableaux génériques en Java?
- Java Array - Comment imprimer des éléments d'un tableau en Java?
- Tableaux multidimensionnels en Java (tableaux 2D et 3D en Java)
- Comment passer / retourner un tableau en Java
- Comment trier un tableau en Java - Tutoriel avec des exemples
- Java Array - Déclarer, créer et initialiser un tableau en Java
- Supprimer / Supprimer un élément d'un tableau en Java