Java LinkedList并发修改异常

Ani*_*aje 3 java iterator linked-list

我为 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)
Run Code Online (Sandbox Code Playgroud)

这是我的代码 -

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());  
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

che*_*ohi 5

您应该进入iterator显示方法,例如:

void displayList(){
    itr = al.iterator();
    while(itr.hasNext()){  
           System.out.println(itr.next());  
    }
}
Run Code Online (Sandbox Code Playgroud)

对于LinkedListhas 一个字段modCount,这个字段用来记录这个列表被结构化修改的次数。

该列表的结构被修改的次数。结构修改是那些改变列表大小的修改,或者以其他方式扰乱列表的修改,以致正在进行的迭代可能会产生不正确的结果。

当你第一次创建的时候iteratormodCount已经0记录ListItrexpectedModCount=modCount=0你修改后的列表。已modCount更新,您的示例是4

当迭代器时,它会比较迭代器expectedModCountList modCount,如果不相等,则ConcurrentModifyExpection抛出异常。