1. Обзор
В этом кратком руководстве мы узнаем о различных способах итерации списка в Java в обратном порядке.
2. Итератор
в Java
Iterator — это
интерфейс в Java Collections Framework , который позволяет нам перебирать элементы в коллекции. Он был представлен в Java 1.2 как замена Enumeration .
3. Итерация в обратном направлении с использованием Core Java
3.1. Обратный цикл _
Самая простая реализация — использовать цикл 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. Коллекции.reverse()
Класс Collections
в Java предоставляет статический метод для изменения порядка элементов в указанном списке:
Collections.reverse(list);
Затем перевернутый список можно использовать для перебора исходных элементов в обратном направлении:
for (String item : list) {
System.out.println(item);
}
Однако этот метод переворачивает фактический список, изменяя порядок элементов на месте , и во многих случаях может быть нежелательным.
4. Итерация в обратном направлении с использованием Apache ReverseListIterator
В библиотеке Apache Commons Collections
есть хороший класс ReverseListIterator
, который позволяет нам перебирать элементы в списке, фактически не реверсируя его.
Прежде чем мы начнем, нам нужно импортировать последние зависимости из Maven Central :
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
Мы можем создать новый ReverseListIterator
, передав исходный список в качестве параметра конструктора:
ReverseListIterator reverseListIterator = new ReverseListIterator(list);
Затем мы можем использовать этот итератор для обхода списка в обратном направлении:
while (reverseListIterator.hasNext()) {
System.out.println(reverseListIterator.next());
}
5. Итерация в обратном направлении с использованием Lists.reverse() в Guava
Точно так же библиотека Google Guava также предоставляет статический метод reverse()
в своем классе Lists
, который возвращает обратное представление предоставленного списка.
Последнюю версию Guava можно найти на Maven Central :
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
Вызов статического метода reverse()
в классе Lists
дает нам список в обратном порядке:
List<String> reversedList = Lists.reverse(list);
Затем перевернутый список можно использовать для итерации в обратном направлении по исходному списку:
for (String item : reversedList) {
System.out.println(item);
}
Этот метод возвращает новый список с элементами исходного списка в обратном порядке .
6. Заключение
В этой статье мы рассмотрели различные способы перебора списка в обратном направлении в Java. Мы рассмотрели несколько примеров с использованием ядра Java, а также популярных сторонних библиотек.
Исходный код этой статьи и соответствующие тестовые примеры доступны на GitHub .