Это достигается следующим образом:
Коллекция содержит private int
член с именем modificationCount
(или что-то в этом роде). Каждый раз, когда вы используете один из методов, изменяющих коллекцию, этот modificationCount
увеличивается.Когда вы создаете итератор в коллекции, итератор замечает текущее значение modificationCount
коллекции, и каждый раз, когда вы вызываете итератор, он удостоверяется, что modificationCount
не изменился, чтобы гарантировать, что коллекцияне был изменен во время итерации.Если итератор обнаружит, что modificationCount
изменился, он выдаст ConcurrentModificationException
.
Когда вы удаляете через iterator
, итератор воздерживается от увеличения modificationCount
коллекции.Это так просто.