ArrayList en une ligne en Java : du débutant au pro
Imaginez : vous écrivez un test, créez un prototype ou voulez simplement définir rapidement une liste de chaînes. En Python, cela ressemble à my_list = ["a", "b", "c"]. En Java… les maux de tête commencent. Faut-il vraiment écrire trois ou quatre lignes à chaque fois, appeler add() pour chaque élément ? Spoiler : non. Dans cet article, nous allons passer en revue toutes les méthodes d'initialisation d'ArrayList en une seule ligne, répondre aux questions les plus fréquentes de Stack Overflow et montrer quelle méthode choisir selon la tâche. C'est parti !
Ce contenu est basé sur une question populaire réelle de Stack Overflow qui a recueilli des milliers de vues. Nous l'avons adaptée pour l'apprentissage, afin que vous ne vous contentiez pas de copier le code, mais que vous compreniez pourquoi il fonctionne (ou ne fonctionne pas).
Pourquoi l'initialisation simple est-elle un problème ?
En Java, il existe ArrayList — un tableau dynamique. Mais il n'a pas de littéral intégré pour la création avec des données, contrairement aux tableaux (String[] arr = {"a", "b", "c"};). C'est pourquoi les débutants écrivent souvent ceci :
ArrayList<String> list = new ArrayList<>();list.add("Java");list.add("Python");list.add("JavaScript");Cela fonctionne, mais prend 4 lignes. Et s'il y a 10 éléments ? 100 ? On aimerait quelque chose de plus compact. Passons en revue toutes les méthodes, légales ou non, pour le faire en une seule ligne.
Méthode 1 : La classique — Arrays.asList()
La méthode la plus populaire que vous trouverez dans les réponses sur Stack Overflow :
ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));Ici, nous créons d'abord une liste de taille fixe avec Arrays.asList(), puis nous la passons au constructeur d'ArrayList. Le résultat est une liste modifiable complète. Vous pouvez ajouter, supprimer, modifier des éléments.
Important : Arrays.asList() lui-même ne retourne pas un ArrayList ! Il retourne sa propre implémentation interne d'une liste de taille fixe. Si vous essayez d'appeler add() sur le résultat de Arrays.asList(), vous obtiendrez une UnsupportedOperationException. Souvenez-vous-en — c'est la question la plus fréquente lors des entretiens et dans les fils de discussion Stack Overflow.
Quand l'utiliser ?
- Lorsque vous avez besoin d'une liste modifiable.
- Lorsque vous travaillez avec Java 7 et inférieur (avant Java 9).
Méthode 2 : Java 9+ — List.of()
À partir de Java 9, une méthode fabrique List.of() est apparue :
List<String> immutableList = List.of("a", "b", "c");Court, joli, concis. Mais il y a un détail : la liste obtenue est immuable (immutable). Vous ne pourrez pas ajouter ou supprimer un élément. Si vous essayez, vous obtiendrez une UnsupportedOperationException.
Si vous avez besoin d'un ArrayList, enveloppez-le :
ArrayList<String> list = new ArrayList<>(List.of("a", "b", "c"));Cette méthode est préférable à Arrays.asList() si vous utilisez Java 9 ou supérieur, car List.of() retourne une liste structurellement immuable (on ne peut pas modifier la taille), contrairement à Arrays.asList() qui permet de modifier les éléments via set().
Quand l'utiliser ?
- Java 9+
- Syntaxe courte nécessaire
- Vous ne prévoyez pas de modifier la liste (ou vous l'enveloppez dans un
ArrayList)
Méthode 3 : Double initialisation (Double Brace) — anti-patron
Sur Stack Overflow, cette astuce apparaît souvent. Elle ressemble à ceci :
ArrayList<String> list = new ArrayList<>() {{ add("a"); add("b"); add("c");}};Que se passe-t-il ici ? Nous créons une classe interne anonyme qui hérite d'ArrayLi