Initialisation des tableaux en Java

Initialisation des tableaux en Java

1. Vue d'ensemble

Dans ce rapide tutoriel, nous allons voir les différentes façons dont nous pouvons initialiser un tableau et les différences subtiles entre celles-ci.

2. Un élément à la fois

Commençons par une méthode simple basée sur des boucles:

for (int i = 0; i < array.length; i++) {
    array[i] = i + 2;
}

Et voyons également comment nous pouvons initialiser un tableau multidimensionnel un élément à la fois:

for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 5; j++) {
        array[i][j] = j + 1;
    }
}

3. Au moment de la déclaration

Initialisons maintenant un tableau au moment de la déclaration:

String array[] = new String[] {
  "Toyota", "Mercedes", "BMW", "Volkswagen", "Skoda" };

Lors de l'instanciation du tableau, il n'est pas nécessaire de spécifier son type:

int array[] = { 1, 2, 3, 4, 5 };

Notez qu’il n’est pas possible d’initialiser un tableau après la déclaration en utilisant cette approche. Une tentative en ce sens entraînera une erreur de compilation.

4. Utilisation deArrays.fill()

La classejava.util.Arrays a plusieurs méthodes nomméesfill() qui acceptent différents types d'arguments et remplissent tout le tableau avec la même valeur:

long array[] = new long[5];
Arrays.fill(array, 30);

La méthode a également plusieurs alternatives qui définissent une plage d'un tableau à une valeur particulière:

int array[] = new int[5];
Arrays.fill(array, 0, 3, -50);

Notez que la méthode accepte le tableau, l'index du premier élément, le nombre d'éléments et la valeur.

5. Utilisation deArrays.copyOf()

La méthodeArrays.copyOf() crée un nouveau tableau en copiant un autre tableau. La méthode comporte de nombreuses surcharges acceptant différents types d'arguments.

Voyons un exemple rapide:

int array[] = { 1, 2, 3, 4, 5 };
int[] copy = Arrays.copyOf(array, 5);

Quelques notes ici:

  • La méthode accepte le tableau source et la longueur de la copie à créer

  • Si la longueur est supérieure à la longueur du tableau à copier, les éléments supplémentaires seront initialisés avec leurs valeurs par défaut.

  • Si le tableau source n'a pas été initialisé, alors unNullPointerException est lancé

  • Si la longueur du tableau source est négative, alors unNegativeArraySizeException est émis

6. Utilisation deArrays.setAll()

La méthodeArrays.setAll() définit tous les éléments d'un tableau à l'aide d'une fonction de générateur:

int[] array = new int[20];
Arrays.setAll(array, p -> p > 9 ? 0 : p);

// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Si la fonction de générateur est nulle, alors unNullPointerException est lancé.

7. Utilisation deArrayUtils.clone()

Enfin, utilisons l'APIArrayUtils.clone() d'Apache Commons Lang 3 - qui initialise un tableau en créant une copie directe d'un autre tableau:

char[] array = new char[] {'a', 'b', 'c'};
char[] copy = ArrayUtils.clone(array);

Notez que cette méthode est surchargée pour tous les types primitifs.

8. Conclusion

Dans cet article, nous avons exploré différentes manières d'initialiser des tableaux en Java.

Comme toujours, la version complète du code est disponibleover on GitHub.