Java 从ArrayList中删除对象时如何避免ConcurrentModificationException
我有一个ArrayList,其中包含具有特定名称(如gum、socks、candy等)的StoreItem对象。我需要迭代ArrayList并根据方法参数中提供的名称删除特定对象…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
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
方法。这是在迭代时删除的唯一方法。不幸的是,这不允许删除任意对象(“基于它们的名称”),只允许删除当前对象。(这在这里似乎不是问题,看到更新的问题)这可能是一个经典的编码错误:您需要一个迭代器来删除。这也是一个完全重复的问题-请关闭这个,各位。对于重复的问题我很抱歉。我将在下一次搜索中更加彻底。干杯