Общий контракт на использование итераторов таков:
Во время выполнения итератора для коллекции базовая коллекция не должна изменяться.
Вы можете делать все, что вы хотите с элементами коллекции, но вы не должны касаться самой коллекции .
Вы получаете ConcurrentModificationException
, потому что часть вашего код в while
l oop делает именно это - он изменяет базовую коллекцию.
Стандартный подход состоит в том, чтобы (а) создать новую копию коллекции и выполнить итерацию по этой копии только для чтения или (б) поместить изменения в отдельную коллекцию.