Java ListIterator (с примерами)

ListIterator является частью фреймворка Java Collections и используется для обхода и манипулирования элементами в списке как в прямом, так и в обратном направлении. Его можно использовать с реализациями интерфейса List, такими как ArrayList, LinkedList и т. д.

Интерфейс ListIterator предоставляет методы для:

  • Перемещение вперед и назад по списку.
  • Безопасное добавление, удаление и изменение элементов в списке во время итерации.
  • Манипулирование на основе индекса при итерации по списку.

1. Пример ListIterator в Java

Чтобы получить ссылку на ListIterator, мы используем метод listIterator() для объекта List.

ListIterator iterator = list.listIterator();

В следующем примере у нас есть список, содержащий четыре строки. Сначала мы итерируем в прямом направлении, а затем в обратном направлении.

List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));ListIterator<String> iterator = list.listIterator();System.out.println("Forward Traversal:");while(iterator.hasNext()) {System.out.print(iterator.next() + " ");}System.out.println("\n\nBackward Traversal:");while(iterator.hasPrevious()) {System.out.print(iterator.previous() + " ");}

Вывод программы.

Forward Traversal:A B C DBackward Traversal:D C B A

2. Методы ListIterator

Интерфейс ListIterator определяет несколько методов для общих случаев использования:

Название метода Описание
hasNext() Возвращает true, если в списке есть другой элемент.
следующий() Возвращает следующий элемент в списке и перемещает курсор на один элемент вперед.
имеетПредыдущий() Возвращает true, если в списке есть предыдущий элемент.
предыдущий() Возвращает предыдущий элемент в списке и перемещает курсор на один элемент назад.
следующийИндекс() Возвращает индекс элемента, который будет возвращен next().
предыдущийИндекс() Возвращает индекс элемента, который будет возвращен функцией previous().
добавить(Е е) Добавляет элемент в список в текущей позиции курсора.
удалять() Удаляет последний элемент, возвращенный next() или previous() из списка.
набор(Е е) Заменяет последний элемент, возвращенный next() или previous(), указанным элементом.

Вот программа на Java, демонстрирующая все вышеперечисленные методы ListIterator в действии:

import java.util.*;public class ListIteratorMethodsExample {public static void main(String[] args) {// Initialize a list with some elementsList<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));System.out.println("Initial List: " + list);// Create a ListIterator for the listListIterator<String> iterator = list.listIterator();// Demonstrate hasNext() and next()System.out.println("\nUsing hasNext() and next():");while(iterator.hasNext()) {System.out.println("Next element: " + iterator.next());}// Move the cursor back to the beginning for the next testiterator = list.listIterator();// Demonstrate hasPrevious() and previous()System.out.println("\nUsing hasPrevious() and previous():");while(iterator.hasPrevious()) {System.out.println("Previous element: " + iterator.previous());}// Move forward again for add and set demonstrationiterator = list.listIterator();// Demonstrate add()System.out.println("\nUsing add():");while(iterator.hasNext()) {String element = iterator.next();if(element.equals("B")) {iterator.add("X");System.out.println("Added 'X' after B.");}}System.out.println("List after add operation: " + list);// Demonstrate remove()iterator = list.listIterator();System.out.println("\nUsing remove():");while(iterator.hasNext()) {String element = iterator.next();if(element.equals("C")) {iterator.remove();System.out.println("Removed 'C'.");}}System.out.println("List after remove operation: " + list);// Demonstrate set()iterator = list.listIterator();System.out.println("\nUsing set():");while(iterator.hasNext()) {String element = iterator.next();if(element.equals("D")) {iterator.set("Y");System.out.println("Replaced 'D' with 'Y'.");}}System.out.println("List after set operation: " + list);}}

Вывод программы:

Initial List: [A, B, C, D]Using hasNext() and next():Next element: ANext element: BNext element: CNext element: DUsing hasPrevious() and previous():Previous element: DPrevious element: CPrevious element: BPrevious element: AUsing add():Added 'X' after B.List after add operation: [A, B, X, C, D]Using remove():Removed 'C'.List after remove operation: [A, B, X, D]Using set():Replaced 'D' with 'Y'.List after set operation: [A, B, X, Y]

3. Итератор против ListIterator

В следующей таблице сравниваются интерфейсы Iterator и ListIterator:

Особенность Итератор ListIterator
Направление движения Только вперед. Вперед и назад.
Операции, специфичные для списков Только итерация по элементам. Можно безопасно добавлять, удалять и изменять элементы во время обхода.
Индекс Доступа Не поддерживается. Методы nextIndex() и previousIndex() предоставляют информацию об индексе.
Обработка параллелизма При неправильном использовании может выдать исключение ConcurrentModificationException. Обеспечивает безопасное удаление/изменение при перемещении по списку.
Поддерживаемые коллекции Работает со всеми коллекциями(не ограничиваясь списками). Работает только с коллекциями на основе списков, такими как ArrayList, LinkedList.
Откат назад Не поддерживается. Возврат поддерживается с помощью previous() и hasPrevious().
Основной вариант использования Универсальная итерация по коллекциям. Итерация с двунаправленной навигацией и манипулированием списками.

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

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

Пишите мне свои вопросы в комментариях.

Прокрутить вверх