2

この小さなコードを見てください:

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 をスローします。

洞察はありますか?

4

2 に答える 2