This question already has answers here:
Why am I not getting a java.util.ConcurrentModificationException in this example?
(10个答案)
4年前关闭。
我为LinkedList写了一个简单的代码,将数据添加到其中并对其进行迭代,
我导入了LinkedList和Iterator所需的程序包,
代码中没有错误,
我收到以下异常-
这是我的代码-
因为
已对该列表进行结构修改的次数。
结构修改是指可以更改
列出,或以其他方式干扰它
进度可能会产生错误的结果。
当您首次创建
当迭代器时,它将比较迭代器的
(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
时,modCount
是0
,因为ListItr
已记录了expectedModCount=modCount=0
,在修改了列表之后。 modCount
已更新,例如 4 。当迭代器时,它将比较迭代器的
expectedModCount
和列表 modCount
,如果不相等,则抛出ConcurrentModifyExpection
。10-04 19:51