Sobes.tech
Junior — Middle

Какво конкретно изключение възниква, ако променяте съдържанието на колекция по време на обхождането й с помощта на итератор?

sobes.tech AI

Отговор от AI

В Java при изменении содержимого коллекции во время её обхода с помощью итератора возникает исключение ConcurrentModificationException.

Это происходит потому, что большинство коллекций в Java реализуют механизм fail-fast итераторов, которые отслеживают изменения коллекции вне итератора и при обнаружении таких изменений выбрасывают это исключение.

Пример:

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

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

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