This question already has answers here:
Why am I not getting a java.util.ConcurrentModificationException in this example?

(10个答案)


4年前关闭。




我为LinkedList写了一个简单的代码,将数据添加到其中并对其进行迭代,
我导入了LinkedList和Iterator所需的程序包,
代码中没有错误,
我收到以下异常-
Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
    at java.util.LinkedList$ListItr.next(Unknown Source)
    at collectionFramework.Demo.displayList(LinkedListDemo.java:38)
    at collectionFramework.LinkedListDemo.main(LinkedListDemo.java:13)

这是我的代码-
package collectionFramework;

import java.util.Iterator;
import java.util.LinkedList;

public class LinkedListDemo{

    public static void main(String[] args) {

        Demo obj = new Demo();

        obj.addToList();
        obj.displayList();
    }

}

class Demo{

    LinkedList<String> al;
    Iterator<String> itr;

    Demo(){
        al = new LinkedList<String>();
        itr = al.iterator();
    }

    void addToList(){
          al.add("Aniruddha");
          al.add("Hitesh");
          al.add("Rahul");
          al.add("Kshitij");
    }

    void displayList(){

        while(itr.hasNext()){
               System.out.println(itr.next());
        }
    }
}

最佳答案

您应该在显示方法中获得iterator,例如:

void displayList(){
    itr = al.iterator();
    while(itr.hasNext()){
           System.out.println(itr.next());
    }
}

因为LinkedList有一个字段modCount,所以该字段用于记录该列表被修改的次数。

已对该列表进行结构修改的次数。
结构修改是指可以更改
列出,或以其他方式干扰它
进度可能会产生错误的结果。

当您首次创建iterator时,modCount0,因为ListItr已记录了expectedModCount=modCount=0,在修改了列表之后。 modCount已更新,例如 4

当迭代器时,它将比较迭代器的expectedModCount列表 modCount,如果不相等,则抛出ConcurrentModifyExpection

10-04 19:51