Gymterview
junior

Напишите однопоточную программу, которая заставляет коллекцию выбросить ConcurrentModificationException

ConcurrentModificationException возникает при модификации коллекции во время итерации по ней через for-each или Iterator.

Пример
List<Integer> list = new ArrayList<>(List.of(1, 2, 3));
for (Integer num : list) {
    list.remove(num); // ConcurrentModificationException
}

Причина: for-each использует Iterator, который при каждом вызове next() проверяет modCount коллекции. Вызов list.remove() изменяет modCount напрямую, не обновляя expectedModCount итератора, что вызывает исключение.

Правильный способ удаления во время итерации:

Пример
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
    it.next();
    it.remove(); // корректно
}
// Или: list.removeIf(num -> true); // Java 8+

На собеседовании: покажите простой пример с for-each и remove(). Объясните причину через modCount и предложите правильное решение через iterator.remove() или removeIf().