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

«Что такое Iterator в Java Collections Framework?» — вопрос из категории Java Core, который задают на 22% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Iterator — это объект, реализующий интерфейс java.util.Iterator<E>, который предоставляет стандартный способ последовательного обхода элементов коллекции без раскрытия её внутренней структуры.

Основные методы:

  • boolean hasNext() — проверяет, остались ли в коллекции элементы.
  • E next() — возвращает следующий элемент и сдвигает позицию итератора.
  • void remove()опционально удаляет последний возвращённый элементо (next()). Вызов без предшествующего next() приводит к IllegalStateException.

Пример использования:

List<String> list = Arrays.asList("A", "B", "C");
Iterator<String> it = list.iterator();

while (it.hasNext()) {
    String element = it.next();
    System.out.println(element);
    // it.remove(); // Безопасное удаление текущего элемента
}

Ключевые особенности и правила:

  1. Безопасное удаление: Удалять элементы во время итерации можно только через метод remove() итератора. Попытка изменить коллекцию напрямую (например, list.remove(...)) во время итерации вызовет ConcurrentModificationException.
  2. Fail-fast поведение: Стандартные итераторы коллекций из пакета java.util являются «отказоустойчивыми» (fail-fast) и бросают ConcurrentModificationException при обнаружении структурных изменений коллекции после создания итератора.
  3. Универсальный доступ: Интерфейс Iterable, содержащий метод iterator(), реализован всеми основными коллекциями (Collection, List, Set, Queue), что позволяет использовать цикл for-each.
  4. Специализированные итераторы: Существуют ListIterator (для списков, с двунаправленным обходом) и Spliterator (для параллельной обработки).