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.