Sobes.tech
Назад к вопросам
Senior
3

Что произойдёт, если во время итерации по коллекции через forEach попытаться удалить текущий элемент из этой же коллекции?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Если во время итерации по коллекции с помощью метода forEach попытаться удалить текущий элемент из этой же коллекции, то поведение зависит от типа коллекции и реализации forEach.

В стандартных коллекциях Java, таких как ArrayList, forEach использует внутренний итератор, и изменение коллекции во время итерации (например, удаление элемента) приведёт к ConcurrentModificationException.

Пример:

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
list.forEach(item -> {
    if (item.equals("b")) {
        list.remove(item); // вызовет ConcurrentModificationException
    }
});

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

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (item.equals("b")) {
        iterator.remove(); // безопасное удаление
    }
}