Tableau en liste en Java : du débutant au pro en 10 minutes
\n\nAvez-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\nLa 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\nDans 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\nPourquoi simple Arrays.asList() est un piège ?
\n\nLa méthode la plus populaire pour convertir un tableau en liste en Java est la méthode Arrays.asList(). Elle semble trompeusement simple :
String[] fruits = {"apple", "banana", "cherry"};\nList<String> fruitList = Arrays.asList(fruits);\n\nC'est tout ? Presque. Mais il y a trois « mais » importants que tout le monde ne connaît pas :
\n\n1. Taille fixe
\nLa liste obtenue via Arrays.asList() a une taille fixe. Essayez d'ajouter un élément :
fruitList.add("orange"); // UnsupportedOperationException !\n\nVous 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.
2. Les modifications dans le tableau se répercutent sur la liste
\nLa liste est une « fenêtre » sur le tableau d'origine. Modifiez le tableau, la liste change aussi :
\n\nfruits[0] = "apricot";\nSystem.out.println(fruitList.get(0)); // apricot\n\nCela peut entraîner des bugs difficiles à détecter, surtout si le tableau est passé entre différentes méthodes.
\n\n3. Les types primitifs ne fonctionnent pas
\nEssayez de convertir un tableau int en liste :
\n\nint[] numbers = {1, 2, 3};\nList<int[]> list = Arrays.asList(numbers); // pas List<Integer>, mais List<int[]> !\n\nAu 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\n5 méthodes pour convertir un tableau en liste en Java
\n\nExaminons toutes les principales méthodes de conversion d'un tableau en liste en Java avec des exemples et des explications.
\n\nMéthode 1 : La classique Arrays.asList()
\nConvient lorsque vous avez besoin d'une liste en lecture seule ou que vous êtes sûr de ne pas modifier sa taille.
\n\nString[] 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\nMéthode 2 : Création d'un nouvel ArrayList
\nLa méthode la plus sûre pour convertir un tableau en ArrayList en Java est de créer une nouvelle instance :
\n\nString[] animals = {"cat", "dog", "bird"};\nList<String> animalList = new ArrayList<>(Arrays.asList(animals));\n// Maintenant, on peut ajouter et supprimer\nanimalList.add("fish"); // OK\n\nCette approche donne une liste modifiable complète, indépendante du tableau d'origine.
\n\nMéthode 3 : Collections.addAll()
\nUne méthode élégante pour convertir un tableau en collection Java. Particulièrement utile lorsque la liste existe déjà :
\n\nString[] 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);