この小さなコードを見てください:
ArrayList al = new ArrayList();
al.add("AA");
al.add("AB");
al.add("AC");
Iterator it = al.iterator();
while(it.hasNext()){
String s = (String)it.next();
if(s.equals("AB")){
al.remove(1);
}
}
ArrayList にはフェイルファスト iteratorがあり、明らかに、指定された ArrayList は固定サイズの配列で構成されていない (メソッドが unusable になるremove()) ため、上記のコードはスローされるはずConcurrentModificationExceptionでしたが、そうではありません。
また、(最初のステートメントとして) ループに print ステートメントを挿入すると、ループが 3 回繰り返されず、正常に終了することが示されます。
ばかげているように聞こえるかもしれませんが、私が誤って考えることができる唯一の理由は、要素が反復子によってトラバースされた後に要素の削除が行われるという事実です。ただし、modificationCount削除によってまだ変更されているため、例外をスローする必要があるため、そうではありません。
やってるだけ
while(it.hasNext()){
it.next();
al.remove(1);
}
ただし、 ConcurrentModificationException をスローします。
洞察はありますか?