迭代器删除操作不起作用

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(); 方法从列表中删除所有元素,而不是创建自己的方法。