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();
}
}
Таким образом, удаление происходит безопасно, без нарушения внутреннего состояния коллекции и без ошибок.