UnsupportedOperationException при итерации по CopyOnWriteArrayList - PullRequest
0 голосов
/ 23 сентября 2018

В книге я встречал следующее утверждение:

Любые методы мутирования, вызываемые на основе копирования-на-записи Iterator или ListIterator (такие как добавление, установка или удаление) выдаст UnsupportedOperationException.

Но когда я запускаю следующий код, он работает просто отлично и не выдает UnsupportedOperationException.

List<Integer> list = new CopyOnWriteArrayList<>(Arrays.asList(4, 3, 52));
System.out.println("Before " + list);
for (Integer item : list) {
    System.out.println(item + " ");
    list.remove(item);
}
System.out.println("After " + list);

Кодвыше дает следующий результат:

Before [4, 3, 52]
4 
3 
52 
After []

Почему я не получаю исключение, когда я изменяю данный list с использованием метода remove?

1 Ответ

0 голосов
/ 23 сентября 2018

Вы звоните remove в самом списке , что нормально.В документации говорится, что вызов remove для итератора списка приведет к выдаче UpsupportedOperationException.Например:

Iterator<Integer> iter = list.iterator();
while (iter.hasNext()) {
    Integer item = iter.next(); 
    System.out.println(item + " ");
    iter.remove(); // Will throw an UpsupportedOperationException
}
...