Почему ConcurrentModificationException не происходит с методом удаления LinkedList?

#java

Вопрос:

 Deque<Employee> employeeDeque = new LinkedList<>();
        employeeDeque.offerLast(new Employee("Michael", 250));
        employeeDeque.offerLast(new Employee("John", 250));
            Iterator iterator = employeeDeque.iterator();
        while (iterator.hasNext()) {
            iterator.next();
            employeeDeque.remove(new Employee("Michael", 250));
    }
 

Тот же код с ArrayList с созданием этого исключения, но remove в LinkedList этого не делает. Почему это так? Методы Add() и Offer() все еще производят его.

Ответ №1:

Javadoc для LinkedList говорит,

Обратите внимание, что отказоустойчивое поведение итератора не может быть гарантировано…Итераторы с отказоустойчивостью генерируют ConcurrentModificationException на основе наилучших усилий.