反復中のArrayListから要素を除去しながら、なぜ私はConcurrentModificationExceptionを得ていませんよ

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以下のために返される実装ArrayListIterator中に同時変更をチェックnext()してremove()、ではないでhasNext()そのロジックです:

public boolean hasNext() {
    return cursor != size;
}

ときに要素を削除するのでIterator、カーソルが最後の要素の前の要素にあったの、除去が原因hasNext()返すためにfalse(以降sizeに等しくなるcursor例外がスローされることなく、自分のループを終了する、除去した後)。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=312437&siteId=1