Itération en arrière dans une liste

Itérer en arrière dans une liste

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons découvrir les différentes façons dont nous pouvons parcourir une liste vers l'arrière en Java.

2. Iterator en Java

UnIterator est une interface dans leJava Collections Framework qui nous permet d'itérer sur les éléments d'une collection. Il a été introduit dans Java 1.2 en remplacement deEnumeration

3. Itération vers l'arrière à l'aide de Core Java

3.1. Bouclefor inversée

L'implémentation la plus simple consiste à utiliser une bouclefor versstart from the last element of the list, and decrement the index lorsque nous atteignons le début de la liste:

for (int i = list.size(); i-- > 0; ) {
    System.out.println(list.get(i));
}

3.2. ListIterator

Nous pouvons utiliser unListIterator pour parcourir les éléments de la liste.

Fournir la taille de la liste sous forme d'index auxListIterator nous donnera un itérateur pointant vers la fin de la liste:

ListIterator listIterator = list.listIterator(list.size());

Cet itérateur nous permet maintenant de parcourir la liste en sens inverse:

while (listIterator.hasPrevious()) {
    System.out.println(listIterator.previous());
}

3.3. Collections.reverse()

La classeCollections en Java fournit une méthode statique pour inverser l'ordre des éléments dans une liste spécifiée:

Collections.reverse(list);

La liste inversée peut ensuite être utilisée pour parcourir les éléments d'origine:

for (String item : list) {
    System.out.println(item);
}

Cette méthode, cependant,reverses the actual list by changing the order of elements in-place, et peut ne pas être souhaitable dans de nombreux cas.

4. Itération à rebours à l'aide desReverseListIterator d'Apache

La bibliothèqueApache Commons Collections a une belle classeReverseListIterator qui nous permet de parcourir les éléments d'une liste sans réellement l'inverser.

Avant de commencer, nous devons importer les dernières dépendances deMaven Central:


    org.apache.commons
    commons-collections4
    4.1

Nous pouvons créer un nouveauReverseListIterator en passant la liste d'origine comme paramètre de constructeur:

ReverseListIterator reverseListIterator = new ReverseListIterator(list);

Nous pouvons ensuite utiliser cet itérateur pour parcourir la liste en arrière:

while (reverseListIterator.hasNext()) {
    System.out.println(reverseListIterator.next());
}

5. Itération à rebours en utilisant lesLists.reverse() de Guava

De même, leGoogle Guava library also provides a static reverse() method in its Lists class qui renvoie une vue inversée de la liste fournie.

La dernière version de Guava peut être trouvée surMaven Central:


    com.google.guava
    guava
    25.0

L'appel de la méthode statiquereverse() sur la classeLists nous donne la liste de manière inversée:

List reversedList = Lists.reverse(list);

La liste inversée peut ensuite être utilisée pour parcourir la liste d'origine:

for (String item : reversedList) {
    System.out.println(item);
}

Cette méthodereturns a new list with the elements of the original list in reversed order.

6. Conclusion

Dans cet article, nous avons examiné différentes façons d'itérer en arrière dans une liste en Java. Nous avons examiné quelques exemples en utilisant le noyau Java, ainsi que des bibliothèques tierces populaires.

Le code source de cet article et les cas de test pertinents sont disponiblesover on GitHub.