@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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Сбер Москва
от 150 000 до 320 000 ₽
Сбер Москва
от 200 000 до 260 000 ₽
Сбер Вологда
от 65 000 ₽
03 дек. 2021, в 19:29
2500 руб./за проект
03 дек. 2021, в 19:20
5000 руб./за проект
03 дек. 2021, в 19:19
50000 руб./за проект