Метод remove() может вызвать исключение ConcurrentModificationException при переборе списка, потому что нельзя проводить одновременно итерацию (перебор) коллекции и изменение её элементов. 1
Исключение возникает, когда пытаются изменить список во время итерации по нему. 1 Это связано с тем, что у коллекции есть поле modCount, которое меняется каждый раз при её изменении, а у итератора — поле expectedModCount, которое изменяется только при изменении коллекции через метод итератора. 1 Если эти поля не совпадают, выбрасывается ConcurrentModificationException. 14
Чтобы избежать исключения, для удаления элементов во время перебора нужно использовать специальный объект — итератор (класс Iterator). 1 Он отвечает за безопасный проход по списку элементов и имеет метод remove() для удаления элемента. 1