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

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

1. обзор

В этом кратком руководстве мы узнаем о различных способах перебора назад по списку в Java.

2. Iterator в Java

Iterator - это интерфейс вJava Collections Framework, который позволяет нам перебирать элементы в коллекции. Он был представлен в Java 1.2 как заменаEnumeration

3. Итерация в обратном направлении с использованием Core Java

3.1. Обратный циклfor

Самая простая реализация - использовать циклfor доstart from the last element of the list, and decrement the index, когда мы дойдем до начала списка:

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);
}

Однако этот методreverses the actual list by changing the order of elements in-place может быть нежелательным во многих случаях.

4. Итерация в обратном направлении с использованиемReverseListIterator Apache

В библиотекеApache Commons Collections есть отличный класс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. Итерация в обратном направлении с использованиемLists.reverse() Guava

Точно так жеGoogle Guava library also provides a static reverse() method in its Lists class, который возвращает обратный вид предоставленного списка.

Последнюю версию Guava можно найти наMaven Central:


    com.google.guava
    guava
    25.0

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

List reversedList = Lists.reverse(list);

Перевернутый список может затем использоваться для итерации по исходному списку:

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

Это методreturns a new list with the elements of the original list in reversed order.

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

В этой статье мы рассмотрели различные способы итерации назад по списку в Java. Мы рассмотрели некоторые примеры использования ядра Java, а также использования популярных сторонних библиотек.

Исходный код этой статьи и соответствующие тестовые примеры доступныover on GitHub.