Iterere bagud gennem en liste

1. Oversigt

I denne hurtige vejledning lærer vi om forskellige måder, hvorpå vi kan gentage bagud gennem en liste i Java.

2. Iterator i Java

En Iterator er en grænseflade i Java Collections Framework, der giver os mulighed for at gentage elementerne i en samling. Det blev introduceret i Java 1.2 som erstatning for Optælling.

3. Iterering bagud ved hjælp af Core Java

3.1. Omvendt til Sløjfe

Den mest enkle implementering er at bruge en til løkke til start fra det sidste element på listen, og mindsk indekset når vi når begyndelsen på listen:

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

3.2. ListIterator

Vi kan bruge en ListIterator for at gentage elementerne på listen.

Tilvejebringelse af listenes størrelse som et indeks til ListIterator vil give os en iterator, der peger på slutningen af ​​listen:

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

Denne iterator giver os nu mulighed for at krydse listen i omvendt retning:

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

3.3. Collections.reverse ()

Det Samlinger klasse i Java giver en statisk metode til at vende rækkefølgen af ​​elementer i en specificeret liste:

Collections.reverse (liste);

Den omvendte liste kan derefter bruges til at gentage bagud over de originale elementer:

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

Denne metode dog vender den aktuelle liste ved at ændre rækkefølgen af ​​elementerne på pladsog er måske ikke ønskelig i mange tilfælde.

4. Iterering baglæns ved hjælp af Apache's ReverseListIterator

Det Apache Commons samlinger biblioteket har en dejlig ReverseListIterator klasse, der giver os mulighed for at løbe gennem elementerne på en liste uden faktisk at vende den.

Før vi starter, skal vi importere de nyeste afhængigheder fra Maven Central:

     org.apache.commons commons-collection4 4.1 

Vi kan skabe et nyt ReverseListIterator ved at sende den oprindelige liste som en konstruktorparameter:

ReverseListIterator reverseListIterator = ny ReverseListIterator (liste);

Vi kan derefter bruge denne iterator til at krydse listen baglæns:

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

5. Iterering baglæns ved hjælp af guava Lists.reverse ()

Tilsvarende er Google Guava-biblioteket giver også en statisk baglæns() metode i sin Lister klasse der returnerer en omvendt visning af den medfølgende liste.

Seneste Guava-version findes på Maven Central:

     com.google.guava guava 25.0 

Påkald af den statiske metode baglæns() på den Lister klasse giver os listen på en omvendt måde:

List reversedList = Lists.reverse (liste);

Den omvendte liste kan derefter bruges til at gentage bagud over den oprindelige liste:

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

Denne metode returnerer en ny liste med elementerne i den oprindelige liste i omvendt rækkefølge.

6. Konklusion

I denne artikel har vi set på forskellige måder at gentage sig bagud gennem en liste i Java. Vi gennemgik nogle eksempler ved hjælp af Java-kerner såvel som ved hjælp af populære tredjepartsbiblioteker.

Kildekoden til denne artikel og de relevante testtilfælde findes på GitHub.