Рубрики
Без рубрики

Листератор Java – листератор на Java

Как мы знаем, Java имеет четыре курсора: Перечисление, Итератор, Список и разделитель. Мы уже обсуждали курсоры перечисления и итератора в моей

Автор оригинала: 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

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

Как получить листератор?

ListIterator listIterator()

Он возвращает итератор списка по элементам в этом списке.

Пример:-

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 работает в обоих направлениях, что означает, что он работает как в прямом, так и в обратном направлении. Это двунаправленный итератор. Для поддержки этой функции он имеет два набора методов.

  • Методы итерации в прямом направлении
  • Нам необходимо использовать следующие методы для поддержки итерации в прямом направлении:

    1. hasNext())
    2. далее()
    3. nextIndex()
  • Методы итерации в обратном направлении
  • Нам нужно использовать следующие методы для поддержки итерации в обратном направлении:

    1. имеет предыдущую()
    2. предыдущая()
    3. предыдущий индекс()

В моем предыдущем посте мы уже обсуждали, как итератор работает внутренне в направлении пересылки в разделе “Как итератор Java работает внутренне?” раздел. Даже ListIterator также работает таким же образом. Если вы хотите просмотреть мой предыдущий пост, пожалуйста, нажмите здесь: Итератор Java .

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

Давайте рассмотрим следующий объект Связанного списка, чтобы понять эту функциональность.

List names = new LinkedList<>();
names.add("E-1");
names.add("E-2");
names.add("E-3");
.
.
.
names.add("E-n");

Теперь создайте объект ListIterator в связанном списке, как показано ниже:

ListIterator namesIterator = 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