为什么我在迭代期间从 ArrayList 中删除元素时没有得到 ConcurrentModificationException
Why I'm not getting ConcurrentModificationException while removing element from ArrayList during iteration
我正在使用以下代码循环遍历数组列表,然后从数组列表中删除一个元素。
这里我期待 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
实现 returned for ArrayList
的 Iterator
检查 next()
和 remove()
中的并发修改,但不是在hasNext()
中,其逻辑是:
public boolean hasNext() {
return cursor != size;
}
由于当 Iterator
的光标位于最后一个元素之前的元素时您删除了一个元素,删除导致 hasNext()
到 return false
(因为size
删除后等于 cursor
),这会结束循环而不抛出异常。
我正在使用以下代码循环遍历数组列表,然后从数组列表中删除一个元素。
这里我期待 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
实现 returned for ArrayList
的 Iterator
检查 next()
和 remove()
中的并发修改,但不是在hasNext()
中,其逻辑是:
public boolean hasNext() {
return cursor != size;
}
由于当 Iterator
的光标位于最后一个元素之前的元素时您删除了一个元素,删除导致 hasNext()
到 return false
(因为size
删除后等于 cursor
),这会结束循环而不抛出异常。