Menu

ArrayList en Java : créer, ajouter, supprimer, parcourir et trier

Comment utiliser l'ArrayList de Java - la liste redimensionnable que l'on choisit à la place d'un simple tableau - en couvrant l'ajout, la lecture, la suppression, la taille, le parcours et le tri.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Une liste qui se redimensionne toute seule

Un simple tableau Java a une longueur fixe : décidez de dix emplacements et vous aurez dix emplacements pour toujours. ArrayList est l'alternative redimensionnable de java.util - elle grandit quand vous ajoutez et rétrécit quand vous supprimez, et elle embarque des méthodes pratiques pour ce que vous faites réellement avec une liste.

Remarquez le type entre chevrons - List<String> - qui indique au compilateur que cette liste contient des valeurs String. Le <> (le « diamant ») à droite permet à Java de déduire le même type sans le répéter. Et notez que vous importez java.util.ArrayList ; elle n'est pas disponible par défaut.

Déclarer en List, construire en ArrayList

Vous verrez presque toujours la variable déclarée avec l'interface List plutôt qu'avec l'ArrayList concrète :

List<String> names = new ArrayList<>();

C'est une bonne habitude, pas une règle. Programmer pour l'interface List signifie que le reste de votre code ne se soucie pas de l'implémentation de liste utilisée, ce qui vous permet d'en changer plus tard sans y toucher. Pour un usage quotidien, les deux se comportent de la même manière.

Ajouter, lire et modifier

  • add(value) ajoute à la fin.
  • add(index, value) insère à une position, décalant les éléments suivants vers la droite.
  • get(index) lit l'élément à une position (en commençant à zéro).
  • set(index, value) écrase un élément existant.

Les indices commencent à zéro, et get sur un indice hors limites lève IndexOutOfBoundsException.

Supprimer des éléments

Il existe un piège classique quand la liste contient des Integer. remove(int) signifie « supprimer par indice » et remove(Object) signifie « supprimer par valeur », donc :

List<Integer> nums = new ArrayList<>(List.of(10, 20, 30));
nums.remove(1);                      // supprime l'indice 1 -> la valeur 20
nums.remove(Integer.valueOf(20));    // supprime la valeur 20

Enveloppez la valeur dans Integer.valueOf(...) lorsque vous voulez dire « supprime cette valeur », et non « supprime cet indice ».

Taille, contains et recherches d'indice

List.of(...) construit rapidement une liste immuable ; la passer au constructeur d'ArrayList vous donne une copie modifiable initialisée avec ces valeurs.

Parcourir une ArrayList

La boucle la plus propre est le for amélioré (le « for-each ») :

Quand vous avez aussi besoin de l'indice, utilisez une boucle comptée avec size() et get(i) :

Une règle : n'ajoutez ni ne supprimez d'éléments d'une liste pendant qu'une boucle for-each la parcourt - cela lève ConcurrentModificationException. Pour supprimer en toute sécurité les éléments correspondants, utilisez removeIf :

Trier

Collections.sort ordonne une liste sur place selon l'ordre naturel (alphabétique pour les chaînes, numérique pour les nombres) :

Pour des ordres personnalisés, passez un Comparator à list.sort(...) - par exemple names.sort(Comparator.comparingInt(String::length)) pour trier par longueur.

ArrayList contient des objets, pas des primitifs

Vous ne pouvez pas écrire ArrayList<int>. Les génériques ne fonctionnent qu'avec des types objet, alors utilisez la classe enveloppe Integer, Double, Boolean, etc. :

L'autoboxing de Java convertit pour vous entre int et Integer, ce qui rend ce code naturel à lire - souvenez-vous simplement que la liste elle-même stocke des objets Integer.

Suite : HashMap

ArrayList est l'outil adapté lorsque l'ordre et la position vous importent. Quand vous devez retrouver des éléments par une clé - un nom d'utilisateur vers un utilisateur, un code produit vers un prix - vous voulez une HashMap, qui fait l'objet de la page suivante.

Questions fréquentes

Comment créer une ArrayList en Java ?

Déclarez-la avec le type des éléments entre chevrons et appelez le constructeur : ArrayList<String> names = new ArrayList<>();. Le <> à droite (le diamant) permet à Java de déduire le type. On déclare généralement la variable avec l'interface List : List<String> names = new ArrayList<>();.

Quelle est la différence entre un tableau et une ArrayList en Java ?

Un simple tableau a une longueur fixe définie à sa création et peut contenir des primitifs comme int. Une ArrayList grandit et rétrécit automatiquement à mesure que vous ajoutez et supprimez des éléments, ne contient que des objets (donc int devient Integer) et fournit des méthodes comme add, remove, contains et size. Utilisez un tableau pour des données primitives de taille fixe ; utilisez une ArrayList lorsque la taille change.

Comment supprimer un élément d'une ArrayList ?

Appelez remove(index) pour supprimer par position, ou remove(object) pour supprimer le premier élément correspondant. Attention avec les listes d'Integer : list.remove(2) supprime l'indice 2, tandis que list.remove(Integer.valueOf(2)) supprime la valeur 2. Pour supprimer pendant un parcours, utilisez le remove() d'un Iterator ou removeIf(...) afin d'éviter une ConcurrentModificationException.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER