Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Что произойдет при удалении элемента из коллекции в for-each?

Вопрос проверяет понимание механизма for-each, итераторов и fail-fast поведения коллекций.

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

При удалении элемента из коллекции внутри for-each обычно выбрасывается ConcurrentModificationException.
Это происходит потому, что for-each использует Iterator под капотом.
Удаление напрямую через коллекцию нарушает ожидаемое состояние итератора.
Итератор обнаруживает несогласованную модификацию.
Такое поведение защищает коллекцию от некорректного обхода.

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

Чтобы понять причину исключения, важно знать, как работает for-each.

Как работает for-each

Цикл:

for (String s : list) {
    // ...
}

Компилятор преобразует в:

Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String s = it.next();
    // ...
}

Почему возникает ошибка

Если внутри цикла вызвать:

list.remove(s);

происходит следующее:

  • Коллекция меняет свою структуру

  • Итератор об этом «не знает»

  • При следующем next() или hasNext() итератор обнаруживает рассинхронизацию

Fail-fast поведение

Большинство стандартных коллекций:

  • хранят счётчик структурных изменений

  • сравнивают его с ожидаемым значением в итераторе

  • выбрасывают исключение при расхождении

Как делать правильно

  • Использовать Iterator.remove()

  • Использовать removeIf()

  • Использовать потокобезопасные коллекции при необходимости

Вывод

for-each нельзя использовать для удаления элементов напрямую из коллекции — это приведёт к ошибке времени выполнения.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Java

    Java

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

#for

#each

#iterator

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