Arrays.asList vs nouveau ArrayList (Arrays.asList ())

1. Vue d'ensemble

Dans ce court didacticiel, nous examinerons les différences entre Arrays.asList (array) et ArrayList (Arrays.asList (array)).

2. Arrays.asList

Commençons par la méthode Arrays.asList .

En utilisant cette méthode, nous pouvons convertir un tableau en un objet List de taille fixe . Cette liste n'est qu'un wrapper qui rend le tableau disponible sous forme de liste. Aucune donnée n'est copiée ou créée .

De plus, nous ne pouvons pas modifier sa longueur car l' ajout ou la suppression d'éléments n'est pas autorisé .

Cependant, nous pouvons modifier des éléments uniques à l'intérieur du tableau. Notez que toutes les modifications que nous apportons aux éléments uniques de la liste seront reflétées dans notre tableau d'origine :

String[] stringArray = new String[] { "A", "B", "C", "D" }; List stringList = Arrays.asList(stringArray); 

Maintenant, voyons ce qui se passe si nous modifions le premier élément de stringList :

stringList.set(0, "E"); assertThat(stringList).containsExactly("E", "B", "C", "D"); assertThat(stringArray).containsExactly("E", "B", "C", "D");

Comme nous pouvons le voir, notre tableau d'origine a également été modifié. La liste et le tableau contiennent désormais exactement les mêmes éléments dans le même ordre.

Essayons maintenant d'insérer un nouvel élément dans stringList :

stringList.add("F");
java.lang.UnsupportedOperationException at java.base/java.util.AbstractList.add(AbstractList.java:153) at java.base/java.util.AbstractList.add(AbstractList.java:111)

Comme nous pouvons le voir, l' ajout / la suppression d'éléments à / de la liste lancera java.lang.UnsupportedOperationException .

3. ArrayList (Arrays.asList (tableau))

Semblable à la méthode Arrays.asList , nous pouvons utiliser ArrayList (Arrays.asList (array)) lorsque nous devons créer une liste à partir d'un tableau .

Mais, contrairement à notre exemple précédent, il s'agit d'une copie indépendante du tableau, ce qui signifie que la modification de la nouvelle liste n'affectera pas le tableau d'origine . De plus, nous avons toutes les fonctionnalités d'une ArrayList standard , comme l'ajout et la suppression d'éléments:

String[] stringArray = new String[] { "A", "B", "C", "D" }; List stringList = new ArrayList(Arrays.asList(stringArray)); 

Modifions maintenant le premier élément de stringList :

stringList.set(0, "E"); assertThat(stringList).containsExactly("E", "B", "C", "D");

Et maintenant, voyons ce qui s'est passé avec notre tableau d'origine:

assertThat(stringArray).containsExactly("A", "B", "C", "D");

Comme nous pouvons le voir, notre tableau d'origine reste intact .

Avant de conclure, si nous examinons le code source JDK, nous pouvons voir que la méthode Arrays.asList retourne un type d' ArrayList différent de java.util.ArrayList . La principale différence est que le ArrayList renvoyé enveloppe uniquement un tableau existant - il n'implémente pas les méthodes d' ajout et de suppression .

4. Conclusion

Dans ce court article, nous avons examiné les différences entre deux façons de convertir un tableau en ArrayList . Nous avons vu comment ces deux options se comportent et la différence entre la façon dont elles implémentent leurs tableaux internes.

Comme toujours, les exemples de code peuvent être trouvés sur GitHub.