Java 链表并发修改异常

标签 java linked-list iterator

<分区>

我为 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,这个字段用来记录这个链表结构被修改的次数。

The number of times this list has been structurally modified. Structural modifications are those that change the size of the list, or otherwise perturb it in such a fashion that iterations in progress may yield incorrect results.

当你第一次创建iterator时,modCount0,因为ListItr已经记录了expectedModCount=modCount=0,修改list后。 modCount 已更新,您的示例是 4

迭代器时,会比较迭代器的expectedModCountListmodCount,如果不相等,则比较ConcurrentModifyExpection扔。

关于Java 链表并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38989719/

相关文章:

java - 我正在 hibernate 状态下保存一个实体。它正在更新同一语句中已保存的数据。如何解决这个问题?

c - 添加函数初始化矩阵时读取矩阵时出错

javascript - 迭代状态变量

c++ - 改变参数值和数量——这是合法的 C++ 吗?

java - 在另一个线程上更新 DefaultListModel

java - 从不一致的 HTML 页面收集数据 - JSoup

java - Netbeans 项目类型

c - 在C中初始化链表中的变量

c - 链表实现

python - 在输入不变的情况下在python中生成连续数字