Использование итераторов

Итератор — это объект, который позволяет программисту пробежать по элементам коллекции. «Ну и что?» — скажут некоторые — «Я могу это сделать с помощью обычного цикла!».

Да, действительно, большинство стандартных коллекций из пакета java.util предоставляют возможность выборки элемента по его индексу, вот так:

List list = new ArrayList();
list.add("One");
list.add("Two");
list.add("Three");

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

Но, таким образом, можно поступить далеко не со всеми коллекциями. Возьмём, к примеру Set.

Вот тут то нам и придёт на помощь итератор. Все коллекции из java.util реализуют интерфейс Collection, который, в свою очередь, расширяет интерфейс Iterable. Вот оно, наше решение! В интерфейсе Iterable описан только один метод

Iterator iterator()

Он и возвращает т.н. итератор, т.е. объект, который поочерёдно возвращает все элементы коллекции. Вот так это выглядит в коде

Set set = new HashSet();
set.add("One");
set.add("Two");
set.add("Three");

Iterator iterator = set.iterator();

while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

Вот так всё просто. Рассмотрим подробнее методы возвращаемого класса Iterator.

boolean hasNext() — метод возвращает true, если в коллекции ещё остались элементы и false, если достигнут конец коллекции.

E next() — метод возвращает текущий элемент. Т.к. итератор является параметризованным классом, то этот метод нам будет возвращать не Object, а сразу тот тип, который нам нужен.

Вопрос 1.

Зачем нужны итераторы?

Вопрос 2.

Как можно упростить код в последнем примере?

Last updated