Java 从ArrayList中删除对象时如何避免ConcurrentModificationException

Java 从ArrayList中删除对象时如何避免ConcurrentModificationException,java,arraylist,loops,Java,Arraylist,Loops,我有一个ArrayList,其中包含具有特定名称(如gum、socks、candy等)的StoreItem对象。我需要迭代ArrayList并根据方法参数中提供的名称删除特定对象…public void removietem(String itemtoremove)如何在不获取CME的情况下执行此操作 public void removeItem(String itemtoremove) { for (StoreItem anItem: this.store) { if (a

我有一个ArrayList,其中包含具有特定名称(如gum、socks、candy等)的StoreItem对象。我需要迭代ArrayList并根据方法参数中提供的名称删除特定对象…
public void removietem(String itemtoremove)
如何在不获取CME的情况下执行此操作

public void removeItem(String itemtoremove) {
   for (StoreItem anItem: this.store) {
       if (anItem.getName().equals(itemtoremove) {
            this.store.remove(anItem);
       }
    }
}

您没有发布相关代码,因此很难判断代码的错误

但是,避免CME的方法之一是

迭代时在迭代器上调用
remove(),而不是调用
list.remove(obj)

编辑:

不要使用for:each,使用迭代器对列表进行迭代,然后在需要执行删除时在迭代器上调用remove()。

状态:

该类的迭代器和listIterator方法返回的迭代器是快速失效的:如果在创建迭代器后的任何时间以任何方式(除迭代器自己的remove或add方法外)修改列表的结构,迭代器将抛出ConcurrentModificationException。


因此,请确保只调用迭代器的
remove
方法。

这是在迭代时删除的唯一方法。不幸的是,这不允许删除任意对象(“基于它们的名称”),只允许删除当前对象。(这在这里似乎不是问题,看到更新的问题)这可能是一个经典的编码错误:您需要一个迭代器来删除。这也是一个完全重复的问题-请关闭这个,各位。对于重复的问题我很抱歉。我将在下一次搜索中更加彻底。干杯