Dans ce didacticiel, vous découvrirez les différentes façons d'utiliser des tableaux (à la fois unidimensionnels et bidimensionnels) en Java à l'aide d'exemples.
En Java, nous pouvons copier un tableau dans un autre. Il existe plusieurs techniques que vous pouvez utiliser pour copier des tableaux en Java.
1. Copie de baies à l’aide de l’opérateur d’affectation
Prenons un exemple,
class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )
Sortie :
1, 2, 3, 4, 5, 6
Dans l'exemple ci-dessus, nous avons utilisé l'opérateur d'affectation ( =
) pour copier un tableau nommé nombres dans un autre tableau nommé positifNumbers.
Cette technique est la plus simple et elle fonctionne également. Cependant, il y a un problème avec cette technique. Si nous changeons les éléments d'un tableau, les éléments correspondants des autres tableaux changent également. Par exemple,
class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays // change value of first array numbers(0) = -1; // printing the second array for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )
Sortie :
-1, 2, 3, 4, 5, 6
Ici, nous pouvons voir que nous avons changé une valeur du tableau de nombres. Lorsque nous imprimons le tableau positiveNumbers, nous pouvons voir que la même valeur est également modifiée.
C'est parce que les deux tableaux font référence au même objet tableau. C'est à cause de la copie superficielle. Pour en savoir plus sur la copie superficielle, visitez la page Copie peu profonde.
Maintenant, pour créer de nouveaux objets de tableau tout en copiant les tableaux, nous avons besoin d'une copie profonde plutôt que d'une copie superficielle.
2. Utilisation de la construction en boucle pour copier des tableaux
Prenons un exemple:
import java.util.Arrays; class Main ( public static void main(String() args) ( int () source = (1, 2, 3, 4, 5, 6); int () destination = new int(6); // iterate and copy elements from source to destination for (int i = 0; i < source.length; ++i) ( destination(i) = source(i); ) // converting array to string System.out.println(Arrays.toString(destination)); ) )
Sortie :
(1, 2, 3, 4, 5, 6)
Dans l'exemple ci-dessus, nous avons utilisé la for
boucle pour parcourir chaque élément du tableau source. Dans chaque itération, nous copions des éléments du tableau source vers le tableau de destination.
Ici, les tableaux source et destination font référence à des objets différents (copie profonde). Par conséquent, si les éléments d'un tableau sont modifiés, les éléments correspondants d'un autre tableau restent inchangés.
Notez la déclaration,
System.out.println(Arrays.toString(destination));
Ici, la méthode toString () est utilisée pour convertir un tableau en chaîne. Pour en savoir plus, visitez la méthode toString () (documentation Java officielle).
3. Copie de tableaux à l'aide de la méthode arraycopy ()
En Java, la classe System contient une méthode nommée arraycopy()
pour copier des tableaux. Cette méthode est une meilleure approche pour copier des tableaux que les deux ci-dessus.
La arraycopy()
méthode vous permet de copier une partie spécifiée du tableau source vers le tableau de destination. Par exemple,
arraycopy(Object src, int srcPos,Object dest, int destPos, int length)
Ici,
- src - tableau source que vous souhaitez copier
- srcPos - position de départ (index) dans le tableau source
- dest - tableau de destination où les éléments seront copiés à partir de la source
- destPos - position de départ (index) dans le tableau de destination
- length - nombre d'éléments à copier
Prenons un exemple:
// To use Arrays.toString() method import java.util.Arrays; class Main ( public static void main(String() args) ( int() n1 = (2, 3, 12, 4, 12, -2); int() n3 = new int(5); // Creating n2 array of having length of n1 array int() n2 = new int(n1.length); // copying entire n1 array to n2 System.arraycopy(n1, 0, n2, 0, n1.length); System.out.println("n2 = " + Arrays.toString(n2)); // copying elements from index 2 on n1 array // copying element to index 1 of n3 array // 2 elements will be copied System.arraycopy(n1, 2, n3, 1, 2); System.out.println("n3 = " + Arrays.toString(n3)); ) )
Sortie :
n2 = (2, 3, 12, 4, 12, -2) n3 = (0, 12, 4, 0, 0)
Dans l'exemple ci-dessus, nous avons utilisé la arraycopy()
méthode,
System.arraycopy(n1, 0, n2, 0, n1.length)
- les éléments entiers du tableau n1 sont copiés dans le tableau n2System.arraycopy(n1, 2, n3, 1, 2)
- 2 éléments du tableau n1 à partir de l'index 2 sont copiés dans l'index à partir de 1 du tableau n3
Comme vous pouvez le voir, la valeur initiale par défaut des éléments d'un tableau de type int est 0.
4. Copie de tableaux à l'aide de la méthode copyOfRange ()
Nous pouvons également utiliser la méthode copyOfRange () définie dans la classe Java Arrays pour copier des tableaux. Par exemple,
// To use toString() and copyOfRange() method import java.util.Arrays; class ArraysCopy ( public static void main(String() args) ( int() source = (2, 3, 12, 4, 12, -2); // copying entire source array to destination int() destination1 = Arrays.copyOfRange(source, 0, source.length); System.out.println("destination1 = " + Arrays.toString(destination1)); // copying from index 2 to 5 (5 is not included) int() destination2 = Arrays.copyOfRange(source, 2, 5); System.out.println("destination2 = " + Arrays.toString(destination2)); ) )
Production
destination1 = (2, 3, 12, 4, 12, -2) destination2 = (12, 4, 12)
Dans l'exemple ci-dessus, notez la ligne,
int() destination1 = Arrays.copyOfRange(source, 0, source.length);
Ici, nous pouvons voir que nous créons le tableau destination1 et que nous y copions le tableau source en même temps. Nous ne créons pas le tableau destination1 avant d'appeler la copyOfRange()
méthode. Pour en savoir plus sur la méthode, visitez Java copyOfRange.
5. Copie de tableaux 2d à l'aide de Loop
Semblable au tableau unidimensionnel, nous pouvons également copier le tableau à 2 dimensions en utilisant la for
boucle. Par exemple,
import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < destination.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); for (int j = 0; j < destination(i).length; ++j) ( destination(i)(j) = source(i)(j); ) ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )
Sortie :
((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))
Dans le programme ci-dessus, notez la ligne,
System.out.println(Arrays.deepToString(destination);
Ici, la deepToString()
méthode est utilisée pour fournir une meilleure représentation du tableau à 2 dimensions. Pour en savoir plus, visitez Java deepToString ().
Copie de tableaux 2D à l'aide de arraycopy ()
Pour simplifier le code ci-dessus, nous pouvons remplacer la boucle interne par System.arraycopy()
comme dans le cas d'un tableau unidimensionnel. Par exemple,
import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < source.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); System.arraycopy(source(i), 0, destination(i), 0, destination(i).length); ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )
Sortie :
((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))
Ici, nous pouvons voir que nous obtenons la même sortie en remplaçant la for
boucle interne par la arraycopy()
méthode.