我为LinkedList编写了一个简单的代码,将数据添加到其中并迭代它,
我导入了LinkedList和Iterator所需的包,
代码中没有错误,
我收到以下例外情况 -
_('product_delete_error_no_owner_found')
这是我的代码 -
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)
答案 0 :(得分:4)
您应该在显示方法中获得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
抛出。
答案 1 :(得分:2)
从列表中获取迭代器后,无法在列表中添加或删除元素。 以下代码应该可以工作。
void displayList(){
Iterator<String> itr = al.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
如需进一步阅读,请参阅以下链接:
Iterating through a Collection, avoiding ConcurrentModificationException when removing in loop
答案 2 :(得分:2)
首先你得到
itr = al.iterator();
然后添加一些元素列表
al.add("Aniruddha");
al.add("Hitesh");
al.add("Rahul");
al.add("Kshitij");
这使得迭代器过时了。
在显示列表
之前,你应该得到新的迭代器void displayList(){
itr = al.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
或通过迭代器添加元素:
itr.add("Aniruddha");
itr.add("Hitesh");
...
但这不是您想要的,因为hasNext()
上的itr
将返回false