Middle
147
Какво ще се случи, ако променим колекцията по време на обхождането с помощта на итератор?
Отговор от AI
sobes.tech AI
При обходе коллекции с использованием стандартного (fail-fast) итератора, любое изменение коллекции (добавление, удаление элементов) с помощью методов самой коллекции, а не итератора, приведет к генерации ConcurrentModificationException.
Итератор хранит внутреннее состояние (счетчик модификаций), которое сравнивается с состоянием коллекции при каждой операции (next(), hasNext()). Если счетчики не совпадают, выбрасывается исключение.
Пример:
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
Iterator<String> it = names.iterator();
while (it.hasNext()) {
String name = it.next();
if (name.equals("Bob")) {
// Это вызовет ConcurrentModificationException
names.remove(name);
}
}
Чтобы безопасно изменять коллекцию во время обхода, следует использовать методы итератора (remove()) или использовать конкурирующие коллекции (ConcurrentHashMap, CopyOnWriteArrayList), которые предоставляют fail-safe итераторы.