← Назад к вопросам

Что может произойти при вызове метода next у итератора

1.3 Junior🔥 111 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что может произойти при вызове метода next у итератора

Основная функция метода next()

Метод next() — это ключевой метод интерфейса Iterator<E>, который возвращает следующий элемент из коллекции. Однако при его вызове могут произойти различные события, которые важно понимать при работе с итераторами.

Возможные сценарии при вызове next()

1. Успешное возвращение элемента

Если в коллекции ещё есть элементы, метод вернёт очередной элемент:

List<String> list = Arrays.asList("первый", "второй", "третий");
Iterator<String> iterator = list.iterator();

if (iterator.hasNext()) {
    String element = iterator.next(); // возвращает "первый"
}

2. Выброс исключения NoSuchElementException

Это самый частый случай проблемы. Если вызвать next() на пустом итераторе или когда уже пройдены все элементы, будет выброшено исключение:

List<String> list = new ArrayList<>();
Iterator<String> iterator = list.iterator();

try {
    String element = iterator.next(); // выбросит NoSuchElementException
} catch (NoSuchElementException e) {
    System.out.println("Больше элементов нет");
}

3. ConcurrentModificationException при изменении коллекции

Если структура коллекции изменится во время итерации (добавление или удаление элементов), итератор обнаружит это и выбросит исключение:

List<String> list = new ArrayList<>(Arrays.asList("один", "два", "три"));
Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {
    String element = iterator.next();
    if (element.equals("два")) {
        list.add("новый"); // ConcurrentModificationException!
    }
}

Правильный способ удаления элементов — использование метода remove() самого итератора:

List<String> list = new ArrayList<>(Arrays.asList("один", "два", "три"));
Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {
    String element = iterator.next();
    if (element.equals("два")) {
        iterator.remove(); // безопасно
    }
}

Лучшие практики работы с итераторами

  • Всегда проверяй hasNext() перед вызовом next()
  • Используй цикл for-each (он безопаснее и читабельнее):
for (String element : list) {
    System.out.println(element);
}
  • Для удаления элементов используй только iterator.remove()
  • Избегай одновременного использования нескольких операций над коллекцией во время итерации

Заключение

Метод next() может успешно вернуть элемент, выбросить NoSuchElementException при отсутствии элементов или ConcurrentModificationException при изменении коллекции. Правильное использование итератора с проверкой hasNext() и соблюдением правил безопасности гарантирует надёжную работу кода.

Что может произойти при вызове метода next у итератора | PrepBro