Вызов collection.remove() во время итерации с помощью инстантицированного итератора может привести к возникновению ConcurrentModificationException.
Это происходит потому, что итератор обычно не знает об изменениях, внесенных в базовую коллекцию напрямую извне итератора. Итератор поддерживает внутреннее состояние (например, индекс текущего элемента), которое становится невалидным, если коллекция изменяется не через методы самого итератора (iterator.remove()).
Некоторые реализации коллекций могут быть "fail-fast" (быстро падающие) и специально бросать ConcurrentModificationException при обнаружении таких изменений, чтобы избежать непредсказуемого поведения.
Единственный безопасный способ модифицировать коллекцию во время итерации — это использовать метод iterator.remove().
java