Java ListIterator — ListIterator в Java
Как мы знаем, в Java есть четыре курсора: Enumeration, Iterator, ListIterator и Spliterator. Мы уже обсуждали курсоры Enumeration и Iterator в моем предыдущем посте. Прежде чем читать этот пост, просмотрите мой предыдущий пост по адресу: Java Iterator. В этом посте мы обсудим третий курсор Java: ListIterator.
Итератор списка Java
Как и итератор, ListIterator — это итератор Java, который используется для последовательного перебора элементов из реализованного объекта List.
- Он доступен, начиная с Java 1.2.
- Расширяет интерфейс Iterator.
- Это полезно только для классов, реализованных в List.
- В отличие от Iterator, он поддерживает все четыре операции: CRUD (CREATE, READ, UPDATE и DELETE).
- В отличие от Iterator, он поддерживает итерации как в прямом, так и в обратном направлении.
- Это двунаправленный итератор.
- У него нет текущего элемента; его позиция курсора всегда находится между элементом, который будет возвращен вызовом предыдущей(), и элементом, который будет возвращен вызовом следующей().
ПРИМЕЧАНИЕ. Что такое операции CRUD в Collection API?
- CREATE: добавление новых элементов в объект Collection.
- ПРОЧИТАЙТЕ: извлечение элементов из объекта Collection.
- ОБНОВЛЕНИЕ: обновление или установка существующих элементов в объекте Коллекция.
- УДАЛИТЬ: удаление элементов из объекта Коллекция.
Диаграмма класса Java ListIterator
Методы ListIterator в Java
Интерфейс Java ListIterator имеет следующие методы.
- void add(E e): вставляет указанный элемент в список.
- boolean hasNext(): возвращает значение true, если этот итератор списка имеет больше элементов при обходе списка в прямом направлении.
- boolean hasPrevious(): возвращает значение true, если этот итератор списка имеет больше элементов при обходе списка в обратном направлении.
- E next(): возвращает следующий элемент в списке и перемещает курсор вперед.
- int nextIndex(): возвращает индекс элемента, который будет возвращен последующим вызовом next().
- E, предыдущая(): возвращает предыдущий элемент в списке и перемещает позицию курсора назад.
- int previousIndex(): возвращает индекс элемента, который будет возвращен последующим вызовом предыдущей().
- void remove(): удаляет из списка последний элемент, возвращенный функциями next() или previous().
- void set(E e): заменяет последний элемент, возвращенный next() или previous(), указанным элементом.
Мы рассмотрим эти методы один за другим с полезными примерами в следующих разделах.
Базовый пример Java ListIterator
В этом разделе мы обсудим некоторые методы ListIterator с некоторыми примерами. Во-первых, нам нужно понять, как получить этот объект итератора. Как получить ListIterator?
ListIterator<E> listIterator()
Он возвращает итератор списка по элементам в этом списке. Пример:-
import java.util.*;
public class ListIteratorDemo
{
public static void main(String[] args)
{
List<String> names = new LinkedList<>();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// Getting ListIterator
ListIterator<String> namesIterator = names.listIterator();
// Traversing elements
while(namesIterator.hasNext()){
System.out.println(namesIterator.next());
}
// Enhanced for loop creates Internal Iterator here.
for(String name: names){
System.out.println(name);
}
}
}
Выход:-
Rams
Posa
Chinni
Пример двунаправленной итерации ListIterator
В этом разделе мы рассмотрим, как работают методы ListIterator для выполнения итераций в прямом и обратном направлениях.
import java.util.*;
public class BiDirectinalListIteratorDemo
{
public static void main(String[] args)
{
List<String> names = new LinkedListt<>();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// Getting ListIterator
ListIterator<String> listIterator = names.listIterator();
// Traversing elements
System.out.println("Forward Direction Iteration:");
while(listIterator.hasNext()){
System.out.println(listIterator.next());
}
// Traversing elements, the iterator is at the end at this point
System.out.println("Backward Direction Iteration:");
while(listIterator.hasPrevious()){
System.out.println(listIterator.previous());
}
}
}
Выход:-
Forward Direction Iteration:
Rams
Posa
Chinni
Backward Direction Iteration:
Chinni
Posa
Rams
Типы итераторов Java
Как мы знаем, в Java есть четыре курсора: Enumeration, Iterator, ListIterator и Spliterator. Мы можем разделить их на два основных типа, как показано ниже:
- Однонаправленные итераторы Это курсоры, которые поддерживают только итерации прямого направления. Например, перечисление, итератор и т. д. являются однонаправленными итераторами. Двунаправленные итераторы Это курсоры, которые поддерживают итерации как прямого, так и обратного направления. Например, ListIterator — это двунаправленный итератор.
Как Java ListIterator работает внутри?
Как мы знаем, Java ListIterator работает в обоих направлениях, что означает, что он работает как в прямом, так и в обратном направлении. Это двунаправленный итератор. Для поддержки этой функциональности он имеет два набора методов.
- Методы итерации в прямом направлении Нам нужно использовать следующие методы для поддержки итерации в прямом направлении:
- hasNext())
- следующий()
- следующийИндекс()
- Методы итерации в обратном направлении Нам нужно использовать следующие методы для поддержки итерации в обратном направлении:
- hasPrevious()
- предыдущий()
- предыдущийИндекс()
В моем предыдущем посте мы уже обсуждали, как итератор работает внутри при переадресации направления в разделе «Как итератор Java работает внутри?» раздел. Даже ListIterator также работает таким же образом. Если вы хотите просмотреть мой предыдущий пост, нажмите здесь: Java Iterator. В этом разделе мы обсудим, как ListIterator работает в обратном направлении. Давайте возьмем следующий объект LinkedList, чтобы понять этот функционал.
List<String> names = new LinkedList<>();
names.add("E-1");
names.add("E-2");
names.add("E-3");
.
.
.
names.add("E-n");
Теперь создайте объект ListIterator в LinkedList, как показано ниже:
ListIterator<String> namesIterator = names.listLterator();
namesIterator.hasNext();
namesIterator.next();
namesIterator.hasPrevious();
namesIterator.previous();
namesIterator.hasPrevious();
Преимущества ListIterator
В отличие от Iterator, ListIterator имеет следующие преимущества:
- Как и Iterator, он поддерживает операции READ и DELETE.
- Он также поддерживает операции CREATE и UPDATE.
- Это означает, что он поддерживает операции CRUD: CREATE, READ, UPDATE и DELETE.
- Он поддерживает итерацию как в прямом, так и в обратном направлении. Это означает, что это двунаправленный курсор Java.
- Имена методов просты, и их легко использовать.
Ограничения ListIterator
По сравнению с Iterator, Java ListIterator имеет много преимуществ. Тем не менее, он по-прежнему имеет следующие некоторые ограничения.
- Это классы реализации списка только для итераторов.
- В отличие от Iterator, он не применим ко всему API коллекции.
- Это не универсальный курсор Java.
- По сравнению с Spliterator, он НЕ поддерживает параллельную итерацию элементов.
- По сравнению с Spliterator, он НЕ поддерживает более высокую производительность при повторении больших объемов данных.
Сходства между Iterator и ListIterator
В этом разделе мы обсудим сходство между двумя курсорами Java: Iterator и ListIterator.
- Беспокойство появилось в Java 1.2.
- Оба являются итераторами, используемыми для итерации элементов коллекции или списка.
- Оба поддерживают операции READ и DELETE.
- Оба поддерживают итерацию прямого направления.
- Оба не являются устаревшими интерфейсами.
Различия между Iterator и ListIterator
В этом разделе мы еще обсудим различия между Java Two Iterators: Iterator и ListIterator.
Iterator | ListIterator |
---|---|
Introduced in Java 1.2. | Introduced in Java 1.2. |
It is an Iterator for whole Collection API. | It is an Iterator for only List implemented classes. |
It is an Universal Iterator. | It is NOT an Universal Iterator. |
It supports only Forward Direction Iteration. | It supports both Forward and Backward Direction iterations. |
It’s a Uni-Directional Iterator. | It’s a Bi-Directional Iterator. |
It supports only READ and DELETE operations. | It supports all CRUD operations. |
We can get Iterator by using iterator() method. | We can ListIterator object using listIterator() method. |
Это все, что касается ListIterator в Java. Я надеюсь, что эти теории и примеры Java ListIterator помогут вам приступить к программированию ListIterator. Ссылка: документ API ListIterator