Iterere bakover gjennom en liste
1. Oversikt
I denne raske opplæringen lærer vi om forskjellige måter vi kan gjenta bakover gjennom en liste i Java.
2. Iterator i Java
An Iterator er et grensesnitt i Java Collections Framework som lar oss itere over elementene i en samling. Den ble introdusert i Java 1.2 som erstatning for Oppregning.
3. Iterere bakover ved hjelp av Core Java
3.1. Omvendt til Løkke
Den mest enkle implementeringen er å bruke en til løkke til start fra det siste elementet i listen, og reduser indeksen når vi når begynnelsen av listen:
for (int i = list.size (); i--> 0;) {System.out.println (list.get (i)); }
3.2. ListIterator
Vi kan bruke en ListIterator for å gjenta elementene i listen.
Tilbyr størrelsen på listen som en indeks til ListIterator vil gi oss en iterator som peker mot slutten av listen:
ListIterator listIterator = list.listIterator (list.size ());
Denne iteratoren lar oss nå krysse listen i motsatt retning:
while (listIterator.hasPrevious ()) {System.out.println (listIterator.previous ()); }
3.3. Collections.reverse ()
De Samlinger klasse i Java gir en statisk metode for å reversere rekkefølgen på elementene i en spesifisert liste:
Collections.reverse (liste);
Den omvendte listen kan deretter brukes til å gjenta bakover over de opprinnelige elementene:
for (String item: list) {System.out.println (item); }
Denne metoden, reverserer den faktiske listen ved å endre rekkefølgen på elementene på plass, og er kanskje ikke ønskelig i mange tilfeller.
4. Iterere bakover ved hjelp av Apache ReverseListIterator
De Apache Commons samlinger biblioteket har en fin ReverseListIterator klasse som lar oss løpe gjennom elementene i en liste uten å faktisk reversere den.
Før vi begynner, må vi importere de siste avhengighetene fra Maven Central:
org.apache.commons commons-collection4 4.1
Vi kan lage et nytt ReverseListIterator ved å sende den opprinnelige listen som en konstruktorparameter:
ReverseListIterator reverseListIterator = ny ReverseListIterator (liste);
Vi kan deretter bruke denne iteratoren til å krysse listen bakover:
mens (reverseListIterator.hasNext ()) {System.out.println (reverseListIterator.next ()); }
5. Iterere bakover ved hjelp av guava Lists.reverse ()
Tilsvarende Google Guava-biblioteket gir også en statisk omvendt() metoden i sin Lister klasse som returnerer en omvendt visning av den angitte listen.
Den siste Guava-versjonen finner du på Maven Central:
com.google.guava guava 25.0
Påkaller den statiske metoden omvendt() på Lister klasse gir oss listen på en omvendt måte:
List reversedList = Lists.reverse (liste);
Den omvendte listen kan deretter brukes til å gjenta bakover over den opprinnelige listen:
for (String element: reversedList) {System.out.println (item); }
Denne metoden returnerer en ny liste med elementene i den opprinnelige listen i omvendt rekkefølge.
6. Konklusjon
I denne artikkelen har vi sett på forskjellige måter å iterere bakover gjennom en liste i Java. Vi gikk gjennom noen eksempler ved hjelp av kjernen i Java, samt brukte populære tredjepartsbiblioteker.
Kildekoden for denne artikkelen og de aktuelle testtilfellene er tilgjengelig på GitHub.