Sobes.tech
Senior
33

Тізім бойынша итерация кезінде ағымдағы элементті жоюға тырыссаңыз, не болады?

Сұралған компаниялар
СБЕРСБЕР

AI-дан жауап

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(); // безопасное удаление
    }
}