Sobes.tech
Back to questions
Junior — Middle
79

Почему удаление элементов из коллекции внутри цикла for-each может привести к ошибкам или некорректному поведению программы?

Answer from AI

sobes.tech AI

Удаление элементов из коллекции внутри цикла for-each (например, в Java) может привести к ошибкам или некорректному поведению, потому что во время итерации коллекция не должна изменяться структурно.

Причины:

  • Итератор, используемый в for-each, не ожидает изменения размера коллекции, и при удалении элементов может выбросить ConcurrentModificationException.
  • Даже если исключение не возникает, изменение коллекции может привести к пропуску элементов или повторной обработке одних и тех же элементов.

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

Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (условие_для_удаления) {
        iterator.remove();
    }
}

Таким образом, удаление происходит безопасно, без нарушения внутреннего состояния коллекции и без ошибок.