我收到此错误:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at onlineShopExamen.Client.remove(Client.java:30)
at onlineShopExamen.Main.<init>(Main.java:17)
at onlineShopExamen.Main.main(Main.java:23)
我的代码是:
public void remove(){
Iterator<Product> iter = lijstProducten.iterator();
while(iter.hasNext()){
Product movie = iter.next();
lijstProducten.remove(movie);
}
}
产品是产品列表(本例中为电影)
使用此:
public void remove(){
Iterator<Product> iter = lijstProducten.iterator();
while(iter.hasNext()){
iter.remove();
}
}
不能正常工作
这给了我这个错误:
Exception in thread "main" java.lang.IllegalStateException
at java.util.ArrayList$Itr.remove(Unknown Source)
at onlineShopExamen.Client.remove(Client.java:30)
at onlineShopExamen.Main.<init>(Main.java:19)
at onlineShopExamen.Main.main(Main.java:25)
编辑已修复
这有效:
public void remove(){
Iterator<Product> iter = lijstProducten.iterator();
while(iter.hasNext()){
iter.next();
iter.remove();
}
}
答案 0 :(得分:3)
这是什么称为保守迭代器:一旦底层容器被修改,任何指向该容器的迭代器都会失效(ConcurrentModificationException意味着什么)。
有Iterator.remove
方法。用它。
public void remove(){
Iterator<Product> iter = lijstProducten.iterator();
while(iter.hasNext()){
iter.next();
iter.remove(); // removes previous item
}
}
你可能(假设lijstProducten是List)也像Ankit所提到的那样写
public void remove(){
lijstProducten.clear();
}
答案 1 :(得分:1)
除了Beyeler的回答。正如我从您的代码中看到的那样,您的remove
方法正在清除整个列表。
我建议您使用方法myList.clear();
从列表中删除所有元素,而不是使用自己的方法。
答案 2 :(得分:0)
尝试iter.remove()而不是lijstProducten.remove(电影)。你不能修改你迭代的列表,但是会在Iterator中删除为你做这个的方法。