3

本で次のような記述を見つけました。

コピー オン ライト ベースのIteratoror 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

4

2 に答える 2

7

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
}
于 2018-09-23T15:40:50.723 に答える