Ответ
Итератор (Iterator
Основные методы интерфейса Iterator<E>:
boolean hasNext()— возвращаетtrue, если в коллекции остались не пройденные элементы.E next()— возвращает следующий элемент коллекции и сдвигает позицию итератора. ВыбрасываетNoSuchElementException, если элементов больше нет.void remove()— опциональная операция. Удаляет из коллекции последний элемент, возвращенный методомnext(). ВыбрасываетIllegalStateException, еслиnext()не был вызван илиremove()уже был вызван после последнегоnext().
Пример использования:
List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry");
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
// Безопасное удаление во время итерации
if (fruit.equals("Banana")) {
iterator.remove(); // Удалит "Banana" из исходного списка
}
}
Преимущества использования итератора:
- Универсальный доступ: Единый интерфейс для обхода любых коллекций (
List,Set,Queueи их реализации). - Безопасное удаление: Это единственный корректный способ удаления элемента из коллекции во время её обхода (кроме специальных concurrent-коллекций). Использование цикла
forи удаление черезCollection.remove()приведет кConcurrentModificationException. - Ленивая загрузка: Итераторы могут получать данные «на лету» (например, из базы данных или потока), не загружая все элементы в память сразу.
Связь с for-each: Цикл for-each (enhanced for loop) неявно использует итератор.
// Этот цикл...
for (String fruit : fruits) {
System.out.println(fruit);
}
// ...эквивалентен этому коду с явным итератором.
Iterator<String> it = fruits.iterator();
while (it.hasNext()) {
String fruit = it.next();
System.out.println(fruit);
}