Naveen:
私は、ArrayListのをループに次のコードを使用して、その後、ArrayListの1つの要素を削除しています。
ここで私はConcurrentModificationExceptionを期待しています。しかし、その例外を取得できませんでした。あなたは番目の要素(N-1)で状態を確認している場合は特に。私を助けてください。以下は私のコードです。
ArrayList<Integer> arrayList = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++) {
arrayList.add(5 * i);
}
System.out.println(arrayList);
Iterator<Integer> iterator = arrayList.iterator();
while (iterator.hasNext()) {
Integer temp = iterator.next();
if (temp == 45) {
/**
* temp == 40 (then i'm getting *ConcurrentModificationException) why not i'm
* getting ConcurrentModificationException if (temp == 45)
*/
arrayList.remove(1);
}
}
System.out.println(arrayList);
前もって感謝します
彼らは次のとおりでした:
実装は、同時変更を検出するために最善の努力をするが、それはそうするために失敗する場合があります。
Iterator
以下のために返される実装ArrayList
のIterator
中に同時変更をチェックnext()
してremove()
、ではないでhasNext()
そのロジックです:
public boolean hasNext() {
return cursor != size;
}
ときに要素を削除するのでIterator
、カーソルが最後の要素の前の要素にあったの、除去が原因hasNext()
返すためにfalse
(以降size
に等しくなるcursor
例外がスローされることなく、自分のループを終了する、除去した後)。