Tableau en liste en Java : 5 méthodes et pièges à éviter

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Tableau en liste en Java : du débutant au pro en 10 minutes

\n\n

Avez-vous déjà écrit du code qui fonctionnait parfaitement avec un tableau, puis soudainement vous aviez besoin d'une liste ? Ou, pire encore, avez-vous obtenu une exception mystérieuse en essayant d'ajouter un élément à une liste créée à partir d'un tableau ? Si oui, vous êtes au bon endroit.

\n\n

La conversion d'un array en liste en Java est l'une de ces tâches qui semblent simples, mais qui cachent de nombreuses surprises. Sur Stack Overflow, cette question a recueilli des centaines de milliers de vues, et ce n'est pas pour rien : derrière une apparente simplicité se cachent des nuances importantes liées au travail avec les collections.

\n\n

Dans cet article, nous allons passer en revue toutes les méthodes légales de conversion d'un tableau en liste en Java, apprendre à éviter les erreurs typiques et déterminer quelle méthode choisir dans une situation donnée. C'est parti !

\n\n

Pourquoi simple Arrays.asList() est un piège ?

\n\n

La méthode la plus populaire pour convertir un tableau en liste en Java est la méthode Arrays.asList(). Elle semble trompeusement simple :

\n\n
String[] fruits = {"apple", "banana", "cherry"};\nList<String> fruitList = Arrays.asList(fruits);
\n\n

C'est tout ? Presque. Mais il y a trois « mais » importants que tout le monde ne connaît pas :

\n\n

1. Taille fixe

\n

La liste obtenue via Arrays.asList() a une taille fixe. Essayez d'ajouter un élément :

\n\n
fruitList.add("orange"); // UnsupportedOperationException !
\n\n

Vous obtiendrez une UnsupportedOperationException. Pourquoi ? Parce que sous le capot, ce n'est pas un vrai ArrayList, mais une implémentation intégrée qui se contente d'encapsuler le tableau.

\n\n

2. Les modifications dans le tableau se répercutent sur la liste

\n

La liste est une « fenêtre » sur le tableau d'origine. Modifiez le tableau, la liste change aussi :

\n\n
fruits[0] = "apricot";\nSystem.out.println(fruitList.get(0)); // apricot
\n\n

Cela peut entraîner des bugs difficiles à détecter, surtout si le tableau est passé entre différentes méthodes.

\n\n

3. Les types primitifs ne fonctionnent pas

\n

Essayez de convertir un tableau int en liste :

\n\n
int[] numbers = {1, 2, 3};\nList<int[]> list = Arrays.asList(numbers); // pas List<Integer>, mais List<int[]> !
\n\n

Au lieu d'une liste de nombres, vous obtenez une liste contenant un seul élément — le tableau entier. Java ne sait pas encapsuler automatiquement les primitives dans une liste.

\n\n

5 méthodes pour convertir un tableau en liste en Java

\n\n

Examinons toutes les principales méthodes de conversion d'un tableau en liste en Java avec des exemples et des explications.

\n\n

Méthode 1 : La classique Arrays.asList()

\n

Convient lorsque vous avez besoin d'une liste en lecture seule ou que vous êtes sûr de ne pas modifier sa taille.

\n\n
String[] colors = {"red", "green", "blue"};\nList<String> colorList = Arrays.asList(colors);\n// Fonctionne : lecture, remplacement d'éléments\ncolorList.set(0, "yellow");\n// Ne fonctionne pas : ajout, suppression
\n\n

Méthode 2 : Création d'un nouvel ArrayList

\n

La méthode la plus sûre pour convertir un tableau en ArrayList en Java est de créer une nouvelle instance :

\n\n
String[] animals = {"cat", "dog", "bird"};\nList<String> animalList = new ArrayList<>(Arrays.asList(animals));\n// Maintenant, on peut ajouter et supprimer\nanimalList.add("fish"); // OK
\n\n

Cette approche donne une liste modifiable complète, indépendante du tableau d'origine.

\n\n

Méthode 3 : Collections.addAll()

\n

Une méthode élégante pour convertir un tableau en collection Java. Particulièrement utile lorsque la liste existe déjà :

\n\n
String[] cities = {"Moscow", "Paris", "London"};\nList<String> cityList = new ArrayList<>();\nCollections.addAll(cityList, cities);\n// Ou en une seule ligne :\nList<String> cityList2 = new ArrayList<>(cities.length);\nCollections.addAll(cityList2, cities);

Blogs

Book Recommendations