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

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

Да, действительно, большинство стандартных коллекций из пакета 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.

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://comaqa.gitbook.io/java-automation/kollekcii/ispolzovanie-iteratorov.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
