Итерация назад през списък

1. Общ преглед

В този бърз урок ще научим за различни начини, по които можем да се върнем назад през списък в Java.

2. Итератор в Java

Един Итераторът е интерфейс в Java колекции рамка, която ни позволява да обхождане на елементите в една колекция. Той е въведен в Java 1.2 като заместител на Enumeration.

3. Итериране назад с използване на Core Java

3.1. Обърнато за Loop

Най-простото изпълнение е да се използва цикъл for, за да започне от последния елемент на списъка и да се намали индексът , когато стигнем до началото на списъка:

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

3.2. ListIterator

Можем да използваме ListIterator, за да прегледаме елементите в списъка.

Предоставянето на размера на списъка като индекс на ListIterator ще ни даде итератор, сочещ към края на списъка:

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

Този итератор сега ни позволява да преминем по списъка в обратна посока:

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

3.3. Collections.reverse ()

Класът Collections в Java предоставя статичен метод за обръщане на реда на елементите в определен списък:

Collections.reverse(list);

След това обърнатият списък може да се използва за итерация назад върху оригиналните елементи:

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

Този метод обаче обръща действителния списък, като променя реда на елементите на място и в много случаи може да не е желателен.

4. Итерация назад с помощта на ReverseListIterator на Apache

The Apache Commons Колекции библиотеката има хубав ReverseListIterator класа, която ни позволява да използваме цикъла на елементите в списъка, без всъщност да го обръщане.

Преди да започнем, трябва да импортираме най-новите зависимости от Maven Central:

     org.apache.commons     commons-collections4     4.1 

Можем да създадем нов ReverseListIterator, като предадем оригиналния списък като параметър на конструктора:

ReverseListIterator reverseListIterator = new ReverseListIterator(list);

След това можем да използваме този итератор, за да обходим списъка назад:

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

5. Итерация назад, използвайки списъците на Guava.reverse ()

По същия начин библиотеката на Google Guava предоставя и статичен метод reverse () в своя клас Lists, който връща обратен изглед на предоставения списък.

Най-новата версия на Guava може да бъде намерена в Maven Central:

     com.google.guava     guava     25.0 

Извикването на статичния метод reverse () в класа Lists ни дава списъка по обратен начин:

List reversedList = Lists.reverse(list);

След това обърнатият списък може да се използва за прелистване назад към първоначалния списък:

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

Този метод връща нов списък с елементите на оригиналния списък в обратен ред .

6. Заключение

В тази статия разгледахме различни начини за итерация назад през списък в Java. Прегледахме някои примери, използвайки основната Java, както и използвайки популярни библиотеки на трети страни.

Изходният код за тази статия и съответните тестови случаи са достъпни в GitHub.