HOWTO · Java
Obtenir le dernier élément d'un ArrayList en Java
Découvrez comment récupérer le dernier élément d’une ArrayList Java, gérer les listes vides et choisir une autre collection pour accéder fréquemment à la fin.
Sur cette page
Pour récupérer le dernier élément d’une ArrayList Java, lisez celui situé à l’index list.get(list.size() - 1). Java utilise des index commençant à zéro : le dernier index valide est donc inférieur de un à la taille de la liste. Contrairement aux listes Python, les listes Java n’acceptent pas les index négatifs comme -1 pour désigner le dernier élément.
Récupérer le dernier élément avec size() et get()
Appelez size() pour connaître le nombre d’éléments de la liste, soustrayez un pour calculer le dernier index, puis transmettez cet index à get(). Par exemple, une liste de quatre éléments possède les index valides 0 à 3 : son dernier élément se trouve donc à l’index 4 - 1.
Exécutez cet exemple. Le code ainsi que les libellés et les sorties qu’il affiche restent en anglais :
import java.util.ArrayList;
public class LastElement {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
int last = numbers.get(numbers.size() - 1);
System.out.println(last);
}
}
40
Cette recherche directe est généralement la solution à privilégier lorsque la valeur est une ArrayList et que vous en cherchez le dernier élément. Elle ne nécessite ni flux, ni copie d’une sous-liste, ni conversion vers une autre collection.
Gérer une ArrayList vide
Une liste vide a une taille de zéro ; size() - 1 vaut donc -1. Passer cet index à get() déclenche une IndexOutOfBoundsException. Vérifiez que la liste contient des éléments avant d’y accéder et choisissez un résultat adapté aux besoins de l’appelant.
Si une méthode représente l’absence d’élément par null, précisez clairement ce contrat. Cet utilitaire rejette également une liste nulle au lieu de la traiter comme une liste vide. Le code ainsi que les libellés et les sorties qu’il affiche restent en anglais :
import java.util.ArrayList;
public class LastElement {
static <T> T lastOrNull(ArrayList<T> list) {
if (list == null) {
throw new IllegalArgumentException("list must not be null");
}
return list.isEmpty() ? null : list.get(list.size() - 1);
}
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
String last = lastOrNull(names);
System.out.println(last == null ? "No elements" : last);
}
}
No elements
Renvoyer null est simple, mais l’appelant doit distinguer l’absence d’élément d’une véritable valeur null dans la liste. Si cette distinction est importante, renvoyez plutôt un Optional<T>, ou laissez l’appelant gérer une liste vide avant d’appeler get(). N’interceptez pas IndexOutOfBoundsException pour éviter d’avoir à décider ce que signifie une entrée vide.
Choisir une collection pour accéder fréquemment aux extrémités
Pour une seule recherche, convertir une ArrayList en ArrayDeque ou en LinkedList entraîne une allocation et la copie des éléments, sans améliorer la liste d’origine. Gardez la ArrayList et utilisez son dernier index.
Si le programme ajoute et retire régulièrement des éléments aux deux extrémités, choisissez dès le départ une deque adaptée à ce mode d’accès. ArrayDeque fournit des opérations aux extrémités, comme addLast() et getLast() ; LinkedList fournit également getLast(), mais ses caractéristiques de stockage et de mémoire sont différentes. Ces types sont à envisager lors de la conception de la collection, et non comme raccourcis pour une lecture ponctuelle. ArrayDeque n’accepte pas les éléments nuls ; tenez-en compte si le modèle de données comprend des valeurs nulles.
Utiliser Iterables.getLast() de Guava
Si le projet dépend déjà de Guava, Iterables.getLast(iterable) constitue une solution facultative pour un Iterable. La documentation officielle de l’API Guava pour Iterables.getLast() décrit les deux surcharges : la méthode à un argument déclenche NoSuchElementException lorsque l’itérable est vide, tandis que Iterables.getLast(iterable, defaultValue) renvoie la valeur par défaut fournie lorsqu’il ne contient aucun élément.
Cette solution nécessite Guava dans le classpath du projet ; cette bibliothèque ne fait pas partie de la bibliothèque standard Java. Pour une ArrayList et un projet qui n’a pas besoin de Guava par ailleurs, size() et get() permettent de garder le code sans dépendance supplémentaire.
Résumé
Utilisez list.get(list.size() - 1) pour récupérer le dernier élément d’une ArrayList non vide. Vérifiez d’abord qu’elle contient des éléments et définissez clairement la conduite à tenir en leur absence : une liste vide produit l’index -1, et get() déclenche une IndexOutOfBoundsException. Évitez de convertir la liste pour un accès ponctuel ; envisagez ArrayDeque ou une autre collection seulement si le mode d’utilisation nécessite des opérations répétées aux extrémités. Iterables.getLast() de Guava est une option lorsque cette dépendance est déjà appropriée.