Как поведет себя инстанцированный итератор для коллекции, если вызвать метод collection.remove()?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Вызов collection.remove() во время итерации с помощью инстантицированного итератора может привести к возникновению ConcurrentModificationException.
Это происходит потому, что итератор обычно не знает об изменениях, внесенных в базовую коллекцию напрямую извне итератора. Итератор поддерживает внутреннее состояние (например, индекс текущего элемента), которое становится невалидным, если коллекция изменяется не через методы самого итератора (iterator.remove()).
Некоторые реализации коллекций могут быть "fail-fast" (быстро падающие) и специально бросать ConcurrentModificationException при обнаружении таких изменений, чтобы избежать непредсказуемого поведения.
Единственный безопасный способ модифицировать коллекцию во время итерации — это использовать метод iterator.remove().
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorModificationExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if ("B".equals(element)) {
// Это вызовет ConcurrentModificationException
// list.remove(element);
// Это безопасный способ удаления
iterator.remove();
}
}
System.out.println(list);
}
}