Sobes.tech
Senior
40

Cosa succede se durante l'iterazione sulla collezione con forEach si tenta di rimuovere l'elemento corrente dalla stessa collezione?

Le aziende dove è stato chiesto
СБЕРСБЕР

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