Автор оригинала: Pankaj Kumar.
Как мы знаем, Java имеет четыре курсора: Перечисление, Итератор, Список и разделитель. Мы уже обсуждали курсоры перечисления и итератора в моем предыдущем посте. Прежде чем перейти к этому сообщению, пожалуйста, ознакомьтесь с моим предыдущим сообщением по адресу: Java Iterator .
В этом посте мы обсудим третий курсор Java: ListIterator .
Листитератор Java
Как и итератор, ListIterator-это итератор Java, который используется для перебора элементов по одному из объекта, реализованного в списке.
- Он доступен начиная с Java 1.2.
- Это расширяет интерфейс итератора.
- Это полезно только для классов, реализованных в списке.
- В отличие от Итератора, он поддерживает все четыре операции: CRUD (СОЗДАНИЕ, ЧТЕНИЕ, ОБНОВЛЕНИЕ и УДАЛЕНИЕ).
- В отличие от Итератора, он поддерживает итерации как в прямом, так и в обратном направлении.
- Это двунаправленный итератор.
- У него нет текущего элемента; его положение курсора всегда находится между элементом, который был бы возвращен вызовом функции previous (), и элементом, который был бы возвращен вызовом функции next().
ПРИМЕЧАНИЕ:- Что такое операции CRUD в API сбора данных?
- СОЗДАТЬ: Добавление новых элементов в объект коллекции.
- ПРОЧИТАЙТЕ: Извлечение элементов из объекта коллекции.
- ОБНОВЛЕНИЕ: Обновление или настройка существующих элементов в объекте коллекции.
- УДАЛИТЬ: Удаление элементов из объекта коллекции.
Диаграмма классов Java ListIterator
В Java ListIterator-это интерфейс в API коллекции. Это расширяет интерфейс итератора. Для поддержки итераций в прямом и обратном направлениях и операций CRUD он использует следующие методы. Мы можем использовать этот итератор для всех классов, реализованных в списке, таких как ArrayList, CopyOnWriteArrayList, LinkedList, Стек, Вектор и т.д.
Мы подробно рассмотрим эти методы с некоторыми полезными методами в следующих разделах.
Методы листератора Java
Интерфейс Java ListIterator имеет следующие методы.
- добавить пустоту(E e): Вставляет указанный элемент в список.
- логическое значение hasNext(): Возвращает значение true, если этот итератор списка содержит больше элементов при обходе списка в прямом направлении.
- логическое значение hasPrevious(): Возвращает значение true, если этот итератор списка содержит больше элементов при обходе списка в обратном направлении.
- E далее(): Возвращает следующий элемент в списке и перемещает положение курсора.
- int nextIndex(): Возвращает индекс элемента, который будет возвращен последующим вызовом функции next().
- E предыдущий(): Возвращает предыдущий элемент в списке и перемещает положение курсора назад.
- int previousIndex(): Возвращает индекс элемента, который будет возвращен последующим вызовом функции previous().
- void remove(): Удаляет из списка последний элемент, возвращенный следующей() или предыдущей().
- набор пустоты(E e): Заменяет последний элемент, возвращенный следующим() или предыдущим (), указанным элементом.
Мы рассмотрим эти методы один за другим с полезными примерами в следующих разделах.
Базовый пример листератора Java
В этом разделе мы обсудим некоторые методы составления списков с некоторыми примерами. Во-первых, нам нужно понять, как получить этот объект итератора.
Как получить листератор?
ListIteratorlistIterator()
Он возвращает итератор списка по элементам в этом списке.
Пример:-
import java.util.*; public class ListIteratorDemo { public static void main(String[] args) { List(); names.add("Rams"); names.add("Posa"); names.add("Chinni"); // Getting ListIterator ListIterator
Выход:-
Rams Posa Chinni
Пример Двунаправленной Итерации Листератора
В этом разделе мы рассмотрим, как работают методы Listiterator для выполнения итераций в прямом и обратном направлениях.
import java.util.*; public class BiDirectinalListIteratorDemo { public static void main(String[] args) { List(); names.add("Rams"); names.add("Posa"); names.add("Chinni"); // Getting ListIterator ListIterator
Выход:-
Forward Direction Iteration: Rams Posa Chinni Backward Direction Iteration: Chinni Posa Rams
Типы итераторов Java
Как мы знаем, Java имеет четыре курсора: Перечисление, Итератор, Список и разделитель. Мы можем разделить их на два основных типа, как показано ниже:
- Однонаправленные Итераторы
- Двунаправленные итераторы
Это курсоры, которые поддерживают только итерации в прямом направлении. Например, Перечисление, Итератор и т. Д. Являются Однонаправленными итераторами.
Это курсоры, которые поддерживают итерации как в прямом, так и в обратном направлении. Например, ListIterator-это Двунаправленный итератор.
Как Работает Java ListIterator Внутри?
Как мы знаем, Java ListIterator работает в обоих направлениях, что означает, что он работает как в прямом, так и в обратном направлении. Это двунаправленный итератор. Для поддержки этой функции он имеет два набора методов.
- Методы итерации в прямом направлении
- hasNext())
- далее()
- nextIndex()
- Методы итерации в обратном направлении
- имеет предыдущую()
- предыдущая()
- предыдущий индекс()
Нам необходимо использовать следующие методы для поддержки итерации в прямом направлении:
Нам нужно использовать следующие методы для поддержки итерации в обратном направлении:
В моем предыдущем посте мы уже обсуждали, как итератор работает внутренне в направлении пересылки в разделе “Как итератор Java работает внутренне?” раздел. Даже ListIterator также работает таким же образом. Если вы хотите просмотреть мой предыдущий пост, пожалуйста, нажмите здесь: Итератор Java .
В этом разделе мы обсудим, как ListIterator работает в обратном направлении.
Давайте рассмотрим следующий объект Связанного списка, чтобы понять эту функциональность.
Listnames = new LinkedList<>(); names.add("E-1"); names.add("E-2"); names.add("E-3"); . . . names.add("E-n");
Теперь создайте объект ListIterator в связанном списке, как показано ниже:
ListIteratornamesIterator = names.listLterator();
Предположим, что список “Итератор имен” выглядит следующим образом:
Здесь курсор Listiterator указывает на перед первым элементом списка. Теперь мы запускаем следующий фрагмент кода в цикле while.
namesIterator.hasNext(); namesIterator.next();
Когда мы запускаем приведенный выше фрагмент кода в цикле while, курсор ListIterator указывает на последний элемент в Связанном списке.
Затем мы можем запустить следующий фрагмент кода, чтобы начать переход от конца к началу.
namesIterator.hasPrevious(); namesIterator.previous();
Когда мы запускаем приведенный выше фрагмент кода, курсор ListIterator указывает на “Предпоследний” элемент в списке, как показано на приведенной выше диаграмме. Выполните этот процесс, чтобы переместить курсор итератора списка к первому элементу Связанного списка.
После прочтения первого элемента, если мы запустим приведенный ниже фрагмент кода, он вернет значение “false”.
namesIterator.hasPrevious();
Когда курсор ListIterator указывает на перед первым элементом Связанного списка, метод hasPrevious() возвращает значение false.
После просмотра всех этих диаграмм мы можем сказать, что Java ListIterator поддерживает итерации как в прямом, так и в обратном направлении, как показано на приведенных ниже диаграммах. Поэтому он также известен как Двунаправленный курсор.
Листитератор прямого направления
ЛистИтератор обратного направления
Преимущества листератора
В отличие от итератора, ListIterator обладает следующими преимуществами:
- Как и итератор, он поддерживает операции ЧТЕНИЯ и УДАЛЕНИЯ.
- Он также поддерживает операции СОЗДАНИЯ и ОБНОВЛЕНИЯ.
- Это означает, что он поддерживает операции CRUD: операции СОЗДАНИЯ, ЧТЕНИЯ, ОБНОВЛЕНИЯ и УДАЛЕНИЯ.
- Он поддерживает как итерацию в прямом, так и в обратном направлении. Это означает, что это двунаправленный курсор Java.
- Имена методов просты и удобны в использовании.
Ограничения листератора
По сравнению с итератором, Java ListIterator имеет много преимуществ. Однако у него все еще есть следующие некоторые ограничения.
- Это итератор, перечисляющий только классы реализации.
- В отличие от итератора, он неприменим для API всей коллекции.
- Это не универсальный курсор Java.
- По сравнению с Spliterator, он НЕ поддерживает параллельную итерацию элементов.
- По сравнению с Spliterator, он НЕ поддерживает лучшую производительность для итерации большого объема данных.
Сходство между итератором и ЛистЕратором
В этом разделе мы обсудим сходство между двумя курсорами Java: Итератором и ЛистЕратором.
- Проблемы представлены в Java 1.2.
- Оба являются итераторами, используемыми для повторения элементов коллекции или списка.
- Оба поддерживают операции ЧТЕНИЯ и УДАЛЕНИЯ.
- Оба поддерживают итерацию в прямом направлении.
- Оба они не являются устаревшими интерфейсами.
Различия между итератором и ЛистЕратором
В этом разделе мы обсудим различия между двумя итераторами Java: Итератором и ЛистЕратором.
Введено в Java 1.2. | Введено в Java 1.2. |
Это итератор для API всей коллекции. | Это итератор только для списка реализованных классов. |
Это универсальный итератор. | Это НЕ универсальный итератор. |
Он поддерживает только Итерацию в прямом направлении. | Он поддерживает итерации как в прямом, так и в обратном направлении. |
Это Однонаправленный итератор. | Это двунаправленный итератор. |
Он поддерживает только операции ЧТЕНИЯ и УДАЛЕНИЯ. | Он поддерживает все операции CRUD. |
Мы можем получить итератор с помощью метода iterator (). | Мы можем перечислить объект с помощью метода ListIterator (). |
Это все о ListIterator на Java. Я надеюсь, что эти теории и примеры листераторов Java помогут вам начать работу с программированием листераторов.
Ссылка : Документ API ListIterator