Iterazione all'indietro in un elenco

1. Panoramica

In questo rapido tutorial, impareremo vari modi in cui possiamo iterare all'indietro attraverso un elenco in Java.

2. Iteratore in Java

Un Iterator è un'interfaccia in Java Collections Framework che ci consente di iterare sugli elementi di una raccolta. È stato introdotto in Java 1.2 in sostituzione di Enumeration.

3. Iterazione all'indietro utilizzando Core Java

3.1. Invertito per Loop

L'implementazione più semplice consiste nell'usare un ciclo for per iniziare dall'ultimo elemento della lista e decrementare l'indice quando si raggiunge l'inizio della lista:

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

3.2. ListIterator

Possiamo usare un ListIterator per iterare sugli elementi nell'elenco.

Fornire la dimensione dell'elenco come indice a ListIterator ci darà un iteratore che punta alla fine dell'elenco:

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

Questo iteratore ora ci consente di attraversare l'elenco nella direzione opposta:

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

3.3. Collections.reverse ()

La classe Collections in Java fornisce un metodo statico per invertire l'ordine degli elementi in un elenco specificato:

Collections.reverse(list);

L'elenco invertito può quindi essere utilizzato per scorrere all'indietro sugli elementi originali:

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

Questo metodo, tuttavia, inverte l'elenco effettivo modificando l'ordine degli elementi sul posto e potrebbe non essere desiderabile in molti casi.

4. Iterazione all'indietro utilizzando ReverseListIterator di Apache

La libreria Apache Commons Collections ha una bella classe ReverseListIterator che ci permette di scorrere gli elementi in un elenco senza effettivamente invertirlo.

Prima di iniziare, dobbiamo importare le ultime dipendenze da Maven Central:

     org.apache.commons     commons-collections4     4.1 

Possiamo creare un nuovo ReverseListIterator passando l'elenco originale come parametro del costruttore:

ReverseListIterator reverseListIterator = new ReverseListIterator(list);

Possiamo quindi utilizzare questo iteratore per scorrere l'elenco all'indietro:

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

5. Iterazione all'indietro usando Lists.reverse () di Guava

Allo stesso modo, la libreria Google Guava fornisce anche un metodo statico reverse () nella sua classe Lists che restituisce una vista inversa dell'elenco fornito.

L'ultima versione di Guava può essere trovata su Maven Central:

     com.google.guava     guava     25.0 

Invocare il metodo statico reverse () sulla classe Lists ci fornisce l'elenco in modo inverso:

List reversedList = Lists.reverse(list);

L'elenco invertito può quindi essere utilizzato per scorrere all'indietro l'elenco originale:

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

Questo metodo restituisce un nuovo elenco con gli elementi dell'elenco originale in ordine inverso .

6. Conclusione

In questo articolo, abbiamo esaminato diversi modi per scorrere all'indietro un elenco in Java. Abbiamo esaminato alcuni esempi utilizzando Java di base, oltre a popolari librerie di terze parti.

Il codice sorgente di questo articolo e i casi di test pertinenti sono disponibili su GitHub.