что такое iterator в java

Итератор в Java

Часто вам захочется перебрать элементы коллекции. Например, для отображения каждого элемента. Самый простой способ сделать это – использовать итератор в Java, который является объектом, реализующим интерфейс Iterator или ListIterator.

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

Прежде чем сможете получить доступ к коллекции через итератор, вы должны получить ее. Каждый из классов коллекции предоставляет метод iterator(), который возвращает итератор в начало коллекции. Используя этот объект итератора, вы можете получить доступ к каждому элементу в коллекции, по одному элементу за раз.

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

Для коллекций, которые реализуют List, вы также можете получить итератор, вызвав ListIterator.

Методы, объявленные Iterator

Методы, объявленные ListIterator

Пример

Вот пример, демонстрирующий как Iterator, так и ListIterator. Он использует объект ArrayList, но общие принципы применимы к любому типу коллекции. Конечно, ListIterator доступен только для тех коллекций, которые реализуют интерфейс List.

Это даст следующий результат –

Типы итераторов

Итераторы используются для обхода коллекций Java. Существует три типа итераторов.

Пример

Средняя оценка / 5. Количество голосов:

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Источник

Что такое Iterator в Java?

Если вы работаете с числовой программой и говорите, что хотите напечатать последовательность, то здесь входит в работу итератор в Java. Таким образом, вы можете получить последовательность, даже не добавляя оператор печати для каждой строки.

Что такое Iterator в Java?

Iterator в Java – это интерфейс, принадлежащий платформе коллекции. Позволяет просматривать коллекцию, получать доступ к элементу данных и удаляет элементы данных коллекции.

Java в основном поддерживает четыре различных курсора. Это именно:

Каждый из этих Java-курсоров имеет свои преимущества и недостатки.

Он также считается универсальным итератором, так как вы можете применить его к любому объекту Collection. Используя Iterator, вы можете выполнять операции чтения и удаления. Это улучшенная версия перечисления с дополнительными функциями элемента.

Методы Iterator

Итератор Java имеет в общей сложности 4 метода. Давайте разберемся с ними подробно.

MethodsDescription
forEachRemaining(Consumer action)Он выполняет действия над каждым элементом до тех пор, пока все элементы не будут обработаны. Также до тех пор, пока действие не создаст исключение.
hasNext()Возвращает истинное значение, если во время итерации встречается большое количество элементов.
next()Возвращает следующий указанный элемент во время итерации.
remove()Этот метод удаляет текущий элемент. Создает исключение IllegalStateException, если предпринята попытка вызвать метод remove(), которому не предшествует вызов метода next().
boolean hasNext()Возвращает true, если итерация содержит больше элементов.

ListIterator в Java

ListIterator в Java – это итератор, который позволяет пользователям перемещаться по коллекции в обоих направлениях. Он содержит следующие методы:

Original contents of al : E D U R E K A
Modified contents of al : E + D + U + R + E + K + A+
Modified list backwards : A + K + E + R + U + D + E+

Преимущества

Итератор в Java имеет следующие преимущества.

Ограничения

Имеют следующие недостатки:

Источник

Итератор Java – Итератор на Java

В этом посте мы обсудим некоторые основы перечисления Java и углубленное обсуждение итератора Java. Поскольку интерфейс перечисления Java является

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

Опубликуйте Краткое содержание

В этом посте мы обсудим следующие концепции итератора Java.

Четыре курсора Java

Прежде всего, я хотел бы определить, что такое курсор Java? Курсор Java-это итератор, который используется для итерации, обхода или извлечения элементов коллекции или объекта потока по одному.

Java поддерживает следующие четыре различных курсора.

У каждого курсора Java есть свои преимущества и недостатки. Мы обсудим некоторые основы перечисления и полную информацию об итераторе в этих сообщениях. Мы обсудим список и разделитель в моих следующих постах.

Ограничения перечисления Java

Перечисление Java доступно с Java 1.0, имеет множество ограничений и не рекомендуется использовать в новых проектах.

ПРИМЕЧАНИЕ:- Что такое операции CRUD в API сбора данных?

Чтобы преодолеть все эти проблемы, Java предлагает новые курсоры: Итератор и список в Java 1.2. Он представил новый тип курсора: Разделитель в Java 1.8.

Мы обсудим итератор с некоторыми подходящими примерами в этом посте.

Итератор Java

В Java итератор-это интерфейс, доступный в среде сбора данных в пакете java.util. Это курсор Java, используемый для перебора набора объектов.

Диаграмма классов итераторов Java

Как показано на диаграмме классов ниже, Итератор Java имеет четыре метода. Мы уже знакомы с первыми четырьмя методами. Корпорация Oracle добавила четвертый метод в этот интерфейс в выпуске Java SE 8.

Методы итератора Java

В этом разделе мы вкратце обсудим методы итератора Java. Мы подробно рассмотрим эти методы с некоторыми полезными примерами в следующем разделе.

Базовый пример итератора Java

Сначала обсудите, как получить объект итератора из коллекции. Каждый класс коллекции имеет следующий метод iterator() для итерации своих элементов.

Он возвращает итератор по элементам, доступным в данном объекте коллекции.

Если мы рассмотрим два приведенных выше примера, то оба примера делают одно и то же. В примере-1 мы создали объект итератора извне и извлекли элементы объекта списка один за другим. В примере-2 мы не создавали объект итератора извне. Мы используем расширенный цикл for для извлечения элементов объекта списка один за другим.

Усовершенствованный цикл for использует объект итератора внутри и выполняет то же самое, что и пример внешнего итератора. Таким образом, оба примера дают один и тот же результат, как показано ниже.

Разработка Итератора Пользовательского Класса

В предыдущем разделе мы обсуждали, как API коллекции реализовал метод iterator() для итерации своих элементов с использованием или без использования расширенного цикла For.

В этом разделе мы обсудим, как предоставить аналогичные функциональные возможности для пользовательских или пользовательских классов. Мы должны следовать этим инструкциям, чтобы обеспечить эту функциональность:

Если мы реализуем эти инструкции в нашем пользовательском классе, то он готов использовать расширенный объект цикла или внешнего итератора для итерации своих элементов.

Давайте приведем простой пример, чтобы четко понять эти инструкции.

Как Итератор Java Работает Внутренне?

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

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

Предположим, что итератор “имена” выглядит следующим образом:

Здесь курсор итератора указывает на предыдущий первый элемент списка. Теперь мы запускаем следующий фрагмент кода.

Когда мы запускаем приведенный выше фрагмент кода, курсор итератора указывает на первый элемент в списке, как показано на приведенной выше диаграмме. Затем запустите следующий фрагмент кода.

Когда мы запускаем приведенный выше фрагмент кода, курсор итератора указывает на второй элемент в списке, как показано на приведенной выше диаграмме. Выполните этот процесс, чтобы переместить курсор итератора к конечному элементу списка.

После прочтения последнего элемента, если мы запустим приведенный ниже фрагмент кода, он вернет значение “false”.

Когда курсор итератора указывает на после последнего элемента списка, метод hasNext() возвращает значение false.

После просмотра всех этих диаграмм мы можем сказать, что итератор Java поддерживает только итерацию в прямом направлении, как показано на приведенной ниже диаграмме. Таким образом, он также известен как Однонаправленный курсор.

Преимущества итератора Java

По сравнению с интерфейсом перечисления итератор Java обладает следующими преимуществами или преимуществами.

Ограничения итератора Java

Однако итератор Java имеет следующие ограничения или недостатки.

Чтобы преодолеть эти ограничения, Java представила еще два курсора: ListIterator и Spliterator. Мы обсудим эти два курсора в моих следующих постах.

Сходство между перечислением Java и итератором

В этом разделе мы обсудим сходство между двумя курсорами Java: перечислением Java и итератором

Различия между перечислением Java и итератором

В следующей таблице описаны различия между перечислением Java и итератором:

Введено в Java 1.2Введено в Java 1.0
Не Унаследованный ИнтерфейсУстаревший интерфейс
Мы можем использовать его для любого класса коллекции.Он используется для итерации только устаревших классов коллекций.
Он поддерживает как операции ЧТЕНИЯ, так и УДАЛЕНИЯ.Он поддерживает только операцию ЧТЕНИЯ.
Это универсальный курсор.Это не Универсальный курсор.
Простые и удобные в использовании имена методов.Длинные имена методов.

Это все об итераторе в Java. Я надеюсь, что эти теории и примеры итераторов Java помогут вам начать работу с программированием итераторов.

Спасибо, что прочитали мои учебные пособия. Пожалуйста, напишите мне комментарий, если вам нравятся мои учебные пособия или у вас есть какие-либо вопросы или предложения или какие-либо ошибки типа.

Источник

Итераторы

— Сегодня я хочу рассказать тебе про итераторы.

Итераторы придумали практически тогда, когда и коллекции. Основная задача коллекций была – хранить элементы, а основная задача итератора – выдавать эти элементы по одному.

— А что сложного в том, чтобы выдать набор элементов?

— Во-первых, некоторые коллекции, как например Set не имеют установленного порядка элементов и/или он постоянно меняется.

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

В третьих – коллекции имеют свойство меняться. Решил ты вывести на экран все содержимое коллекции, а прямо в середине вывода JVM переключилась на другую нить, которая половину элементов из этой коллекции заменила на другую. Вот и получишь ты вместо вывода не пойми что.

— Вот! Именно такие проблемы должен был решить итератор. Итератор – это специальный внутренний объект в коллекции, который с одной стороны имеет доступ ко всем ее private данным и знает ее внутреннюю структуру, с другой – реализует общедоступный интерфейс Iterator, благодаря чему все знают, как с ним работать.

Некоторые итераторы имеют внутри себя массив, куда копируются все элементы коллекции во время создания итератора. Это гарантирует, что последующее изменение коллекции не повлияет на порядок и количество элементов.

Думаю, ты уже сталкивался с тем, что при работе с for each нельзя одновременно «идти по коллекции циклом» и удалять из нее элементы. Это все именно из-за устройства итератора.

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

Давай я тебе напомню, как устроен итератор.

В Java есть специальный интерфейс Iterator, вот какие у него методы:

Методы интерфейса IteratorОписание
boolean hasNext()Проверяет, есть ли еще элементы
E next()Возвращает текущий элемент и переключается на следующий.
void remove()Удаляет текущий элемент

Итератор позволяет поочередно получить все элементы коллекции. Логичнее представить итератор чем-то вроде InputStream – у него есть все данные, но его задача выдавать их последовательно.

Метод next() возвращает следующий (очередной) элемент коллекции.

Метод hasNext() используется, чтобы проверять, есть ли еще элементы.

Ну, а remove() – удаляет текущий элемент.

— А почему методы называются так странно? Почему не isEmpty() или getNextElement()?

Разве так не логичнее?

— Логичнее, но такие названия пришли из языка C++, где итераторы появились раньше.

Кроме итератора есть еще интерфейс Iterable – его должны реализовывать все коллекции, которые поддерживают итератор. У него есть единственный метод:

Методы interface IterableОписание
Iterator iterator()Возвращает объект-итератор

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

Такое использование итератора не очень удобно – слишком много лишнего и очевидного кода. Ситуация упростилась, когда в Java появился цикл по итератору – for-each.

Теперь такой код гораздо компактнее и читабельнее:

Это один и тот же код! Итератор используется и там, и там.

Цикл for-each можно использовать для любых объектов, которые поддерживают итератор. Т.е. ты можешь написать свой класс, добавить ему метод iterator() и сможешь использовать его объекты в правой части конструкции for-each.

— Ого! Я, конечно, не рвусь писать собственные коллекции и итераторы, но предложение все равно заманчивое. Возьму на карандаш.

— Кроме того, есть еще одна популярная разновидность итераторов, для которой даже придумали свой интерфейс. Речь идет об итераторе для списков – ListIterator.

Списки, независимо от реализации, обладают порядком элементов, что в свою очередь позволяет работать с ними через итератор чуть более удобно.

Вот какие методы есть у интерфейса ListIterator :

МетодОписание
boolean hasNext()Проверяет, есть ли еще элементы впереди.
E next()Возвращает следующий элемент.
int nextIndex()Возвращает индекс следующего элемента
void set(E e)Меняет значение текущего элемента
boolean hasPrevious()Проверяет, есть ли элементы позади.
E previous()Возвращает предыдущий элемент
int previousIndex()Возвращает индекс предыдущего элемента
void remove()Удаляет текущий элемент
void add(E e)Добавляет элемент в список.

Т.е. тут мы можем ходить не только вперед, но и назад. И еще пара фич по мелочи.

— Что ж, интересная штука. А где его используют?

— Например, ты хочешь двигаться туда-обратно по связному списку. При этом операция get будет довольно медленной, а операция next() очень быстрой.

Источник

30.21. Java – Iterator и ListIterator

Содержание

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

Прежде чем вы сможете получить доступ к коллекции через итератор, вы должны ее получить. Каждый из классов коллекции предоставляет метод iterator (), который возвращает итератор в начало коллекции. Используя этот объект итератора, вы можете получить доступ к каждому элементу в коллекции, по одному элементу за раз.

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

Для коллекций, которые реализуют List, вы также можете получить итератор, вызвав ListIterator.

Методы, объявленные Iterator

Метод и описание
1boolean hasNext( )
Возвращает true, если есть ещё элементы. В противном случае возвращает false.
2Object next( )
Возвращает следующий элемент. Вызывает исключение NoSuchElementException, если не существует следующего элемента.
3void remove( )
Удаляет текущий элемент. Выбрасывает IllegalStateException, если делается попытка вызвать remove(), которому не предшествует вызов next().

Методы, объявленные ListIterator

Пример

Вот пример, демонстрирующий как Iterator, так и ListIterator в Java. Он использует объект ArrayList, но общие принципы применимы к любому типу коллекции.

Конечно, ListIterator доступен только для тех коллекций, которые реализуют интерфейс List.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *