Junior — Middle
Miks võib elementide eemaldamine kogumist for-each tsükli sees põhjustada vigu või ebaõiget programmi käitumist?
sobes.tech AI
Vastus AI-lt
Удаление элементов из коллекции внутри цикла for-each (например, в Java) может привести к ошибкам или некорректному поведению, потому что во время итерации коллекция не должна изменяться структурно.
Причины:
- Итератор, используемый в for-each, не ожидает изменения размера коллекции, и при удалении элементов может выбросить ConcurrentModificationException.
- Даже если исключение не возникает, изменение коллекции может привести к пропуску элементов или повторной обработке одних и тех же элементов.
Правильный способ удаления элементов во время итерации — использовать явный итератор и его метод remove():
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (условие_для_удаления) {
iterator.remove();
}
}
Таким образом, удаление происходит безопасно, без нарушения внутреннего состояния коллекции и без ошибок.