迭代器删除操作不起作用
Iterator remove operation doesn't work
我收到这个错误:
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);
}
}
其中 Product 是产品列表(在本例中为电影)
使用这个:
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();
}
}
这就是所谓的保守迭代器:一旦底层容器被修改,任何指向该容器的迭代器都会失效(这就是 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();
}
尝试 iter.remove() 而不是 lijstProducten.remove(电影)。您无法修改正在迭代的列表,但 Iterator 中的 remove 方法可以为您完成。
除了贝耶勒的回答。正如我从您的代码中看到的,您的 remove
方法正在清除整个列表。
我建议您使用 myList.clear();
方法从列表中删除所有元素,而不是创建自己的方法。
我收到这个错误:
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);
}
}
其中 Product 是产品列表(在本例中为电影)
使用这个:
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();
}
}
这就是所谓的保守迭代器:一旦底层容器被修改,任何指向该容器的迭代器都会失效(这就是 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();
}
尝试 iter.remove() 而不是 lijstProducten.remove(电影)。您无法修改正在迭代的列表,但 Iterator 中的 remove 方法可以为您完成。
除了贝耶勒的回答。正如我从您的代码中看到的,您的 remove
方法正在清除整个列表。
我建议您使用 myList.clear();
方法从列表中删除所有元素,而不是创建自己的方法。