Java Iterator
![]()
Iterator interface belongs to java.util package and it is a part of Collection framework. Iterator interface allows us to iterate over collection of different class objects such as ArrayList, HashSet etc.
Iterator supports add and remove operations only.
Limitations of Iterator:
- Iterator works only in forward direction.
- Add and update of new element is not allowed.
Syntax:
Iterator Methods:
hasNext() → returns true if iterator has more elements.
next() → returns next element if iterator has more elements.
remove() → remove the element from iterator. There is no return type of this method.
remove method throws two below exceptions:
- UnsupportedOperationException
- IllegalStateException
Example:
Below is the example to iterate through ArrayList.
Note: I always try to make things easy and simple, please read comments while reading code snippet will help to understand better.
Iterator remove() method:
Remove() method will help us to remove element from list.
Custom Iterator:
Custom iterator will help us to iterate over custom collection class.
Follow below steps to create custom iterator:
- Create bean class having parameterized constructor or setter-getter methods.
- Create One more custom collection class like Students and implement same with Iterator interface and override iterator() method to iterate over students collection defined in Students class.
- Create for loop and iterate through Students custom collection.
Difference Between Iterator and ListIterator
I hope you found out this article interesting and informative. Please share it with your friends to spread the knowledge.
Interface Iterator<E>
This interface is a member of the Java Collections Framework.
Method Summary
Method Details
hasNext
remove
The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method, unless an overriding class has specified a concurrent modification policy.
The behavior of an iterator is unspecified if this method is called after a call to the forEachRemaining method.
forEachRemaining
The behavior of an iterator is unspecified if the action modifies the collection in any way (even by calling the remove method or other mutator methods of Iterator subtypes), unless an overriding class has specified a concurrent modification policy.
Subsequent behavior of an iterator is unspecified if the action throws an exception.
The default implementation behaves as if:
Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples. Other versions.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2023, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.
Зачем нужен метод remove в итераторе, если у каждой коллекции есть свой remove?
Подскажите, зачем нужен метод remove в итераторе, если у каждой коллекции есть свой remove? Все ответы, которые были мной найдены, очень расплывчаты.
Метод remove() итератора нужен для того, чтобы мы могли удалять элементы коллекции во время прохода по ней.
Если попробовать сделать удаление элементов коллекции при проходе по ней в цикле foreach, который обычно очень удобен и часто используется, то будет выброшено исключение.
Для коллекций, реализующих List , можно использовать тот факт, что в них имеется возможность брать элемент по индексу.
Вариант с удалением элемента из начала:
Вариант с удалением элемента из конца:
Результат в обоих случаях:
Однако дело в том, что оба этих варианта не очень похожи на то, что мы пытались проделывать с foreach и успешно проделали с итератором. Тут как такового нет прохода по элементам коллекции.
Наконец, проблема в том, что мы можем иметь дело, например, с Set . В множествах нет такого понятия как "получение элемента по индексу", поэтому описанные выше варианты со взятием отдельного элемента мы применить вообще не сможем. Цикл foreach при попытке удалить элемент бросит исключение. Остаётся итератор.
Вот тут можно прочитать хороший и подробный ответ про разницу между итератором и циклом.
Цикл for-each

Вы уже познакомились со множеством HashSet . И если вы действительно разбирались с ним, а не просто читали лекцию, должны были задаться вопросом:
А как вывести список всех элементов HashSet на экран? Ведь методов get() и set() у множества нет!
И HashSet в своей проблеме не одинок. Кроме HashSet , есть еще много различных коллекций, у которых нельзя получить элемент по номеру, ведь четкий порядок элементов отсутствует.
Программисты в свое время изобрели много сложных структур данных, таких как граф, дерево. Или, например, список списков.
Многие контейнеры меняют порядок своих элементов при добавлении новых или удалении существующих элементов. Например, есть список, который хранит элементы в отсортированном порядке, и при добавлении нового элемента он практически всегда вставляется в середину списка.
Вот мы и получаем ситуацию, что контейнер, содержащий элементы, есть, сами элементы тоже есть, а фиксированного порядка нет.
Но допустим, мы хотим скопировать все элементы из такой коллекции в массив или список. Нам нужно получить все элементы. Нам все равно в каком порядке мы их обойдем, главное — не повторяться. Как нам это сделать?
2. Итератор в коллекции
В качестве решения вышеописанной проблемы было предложено решение — итератор .
Итератор — это специальный объект у коллекции, который помогает обойти все элементы коллекции и не повторяться.
Получить итератор у любой коллекции можно с помощью кода:
Где имя — это имя переменной-коллекции, Тип — это тип элементов коллекции. iterator () — это метод коллекции. it — это имя переменной-объекта-итератора.
У объекта-итератора есть 3 метода:
| Метод | Описание |
|---|---|
| Возвращает очередной элемент коллекции | |
| Проверяет, есть ли еще не пройденные элементы | |
| Удаляет текущий элемент коллекции |
Эти методы чем-то похожи на методы класса Scanner: nextInt() и hasNextInt() .
Метод next () возвращает очередной элемент коллекции, у которой мы получили итератор.
Метод hasNext () проверяет, есть ли еще элементы в коллекции, которые итератор не вернул.
Вот как можно вывести на экран все элементы множества HashSet :
Заносим в set приветствия на разных языках.
Получаем объект-итератор у множества set .
Пока есть еще элементы