@Skoleev

Почему ConcurrentModificationException не происходит во время изменении коллекции методом remove() при LinkedList?

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() ConcurrentModificationException кидается сразу же.
Почему remove() такой особенный при работе с LinkedList?
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
xez
@xez Куратор тега Java
Senior Junior Roo
У вас частный случай для двух элементов.
ConcurrentModificationException бросает iterator.next();
У вас в первом проходе все ок, до того момента пока не удаляется один элемент, а второго прохода в цикле у вас нет, т.к. ваша коллекция из двух элеменотов заканчивается (iterator.hasNext() == false)

Добавьте третий элемент - получите ConcurrentModificationException
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы