Iteracija unatrag kroz popis

1. Pregled

U ovom brzom vodiču naučit ćemo o raznim načinima na koje se možemo vraćati unatrag kroz popis na Javi.

2. Iterator na Javi

An Iterator je sučelje u okviru Java Collections Framework koje nam omogućuje prelazak preko elemenata u zbirci. Uveden je u Javi 1.2 kao zamjena za Nabrajanje.

3. Iteracija unatrag korištenjem jezgre Java

3.1. Obrnuto za Petlja

Najjednostavnija implementacija je korištenje a za petlja do krenite od zadnjeg elementa popisa i smanjite indeks kako dolazimo do početka popisa:

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

3.2. ListIterator

Možemo koristiti a ListIterator za prelazak preko elemenata na popisu.

Pružanje veličine popisa kao indeksa za ListIterator dat će nam iterator koji pokazuje na kraj popisa:

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

Ovaj nam iterator sada omogućuje prelazak popisa u obrnutom smjeru:

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

3.3. Collections.reverse ()

The Zbirke klasa u Javi pruža statičku metodu za preokretanje redoslijeda elemenata na navedenom popisu:

Collections.reverse (popis);

Tada se obrnuti popis može koristiti za prevrtanje unatrag preko izvornih elemenata:

za (String stavka: popis) {System.out.println (stavka); }

Ova metoda, međutim, preokreće stvarni popis promjenom redoslijeda elemenata na mjestu, a možda nije poželjno u mnogim slučajevima.

4. Iteracija unatrag pomoću Apachea ReverseListIterator

The Zbirke Apache Commons knjižnica ima lijep ReverseListIterator klasa koja nam omogućuje da petljamo kroz elemente na popisu, a da ga zapravo ne preokrenemo.

Prije nego što započnemo, moramo iz Maven Central uvesti najnovije ovisnosti:

     org.apache.commons commons-collection4 4.1 

Možemo stvoriti novo ReverseListIterator prosljeđivanjem izvornog popisa kao parametra konstruktora:

ReverseListIterator reverseListIterator = novi ReverseListIterator (popis);

Tada ovaj iterator možemo koristiti za prelazak popisa unatrag:

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

5. Iteracija unatrag pomoću Guave Lists.reverse ()

Slično tome, Google Guava knjižnica također nudi statički podatak obrnuti () metoda u svom Popisi razred koji vraća obrnuti prikaz navedenog popisa.

Najnoviju verziju Guave možete pronaći na Maven Central:

     com.google.guava guava 25.0 

Pozivanje na statičku metodu obrnuti () na Popisi klasa daje nam popis na obrnut način:

Popis reversedList = Lists.reverse (popis);

Tada se obrnuti popis može koristiti za vraćanje unatrag preko izvornog popisa:

za (String stavka: reversedList) {System.out.println (stavka); }

Ova metoda vraća novi popis s elementima izvornog popisa obrnutim redoslijedom.

6. Zaključak

U ovom smo članku pogledali različite načine unatrag kroz popis na Javi. Prošli smo kroz nekoliko primjera korištenja jezgre Java, kao i korištenja popularnih neovisnih knjižnica.

Izvorni kôd za ovaj članak i relevantni testovi dostupni su na GitHubu.