Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: iterator

Как безопасно удалить элементы из коллекции во время обхода?

Этот вопрос проверяет знание механизмов итерации и защиты коллекций от некорректных изменений.

Короткий ответ

Безопасно удалять элементы можно через Iterator.remove().
Прямое удаление из коллекции во время обхода приводит к ошибке.
Iterator знает о своём текущем состоянии и корректно обновляет его.
Это предотвращает ConcurrentModificationException.
Другие способы зависят от типа коллекции.

Длинный ответ

При обходе коллекции важно не нарушать её внутреннее состояние.

Проблема модификации во время итерации

Большинство коллекций Java используют механизм fail-fast:

  • коллекция отслеживает структурные изменения

  • при несогласованной модификации выбрасывается исключение

Корректный способ через Iterator

Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String value = it.next();
    if (value.equals("remove")) {
        it.remove();
    }
}

Почему это работает:

  • Iterator синхронизирован с состоянием коллекции

  • изменение происходит через него самого

Почему нельзя делать list.remove()

for (String s : list) {
    list.remove(s); // ошибка
}

Причины:

  • for-each использует Iterator

  • коллекция меняется «в обход» итератора

Альтернативные подходы

В зависимости от задачи:

  • использование removeIf()

  • работа с копией коллекции

  • потокобезопасные коллекции (CopyOnWriteArrayList)

Вывод

Безопасное удаление во время обхода возможно только через предусмотренные API, чаще всего через Iterator.remove().

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#iterator

Подпишись на Java Developer в телеграм