Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我';在迭代期间从ArrayList中删除元素时,我没有得到ConcurrentModificationException_Java_Arraylist_Concurrency_Fail Fast_Java Failsafe - Fatal编程技术网

Java 为什么我';在迭代期间从ArrayList中删除元素时,我没有得到ConcurrentModificationException

Java 为什么我';在迭代期间从ArrayList中删除元素时,我没有得到ConcurrentModificationException,java,arraylist,concurrency,fail-fast,java-failsafe,Java,Arraylist,Concurrency,Fail Fast,Java Failsafe,我使用以下代码循环遍历arraylist,然后从arraylist中删除一个元素 这里我期待ConcurrentModificationException。但没有得到例外。特别是当您使用第(n-1)个元素检查条件时。请帮帮我。下面是我的代码 ArrayList<Integer> arrayList = new ArrayList<Integer>(); for (int i = 1; i <= 10; i++) { arrayLis

我使用以下代码循环遍历arraylist,然后从arraylist中删除一个元素

这里我期待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);
ArrayList ArrayList=new ArrayList();

对于(inti=1;i,实现尽最大努力检测并发修改,但在某些情况下它无法检测到并发修改

ArrayList
Iterator
返回的
Iterator
实现检查
next()
remove()
中的并发修改,但不检查
hasNext()
中的并发修改,其逻辑为:

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

由于在
迭代器
的光标位于最后一个元素之前的元素时删除了一个元素,因此删除会导致
hasNext()
返回
false
(因为
大小
在删除后变为等于
光标
),它结束循环而不引发异常。

这不是万无一失的。如果注意到修改,就会引发异常,但并不总是注意到。如果我将
45
更改为
25
,则会引发异常。请改用
iterator.remove();
来消除异常。