0

我有一个 ArrayList,其中包含具有特定名称的 StoreItem 对象,例如口香糖、袜子、糖果等。我需要迭代 ArrayList 并根据方法参数中提供的名称删除特定对象...public void removeItem(String itemtoremove)如何在不获取 CME 的情况下执行此操作?

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

2 回答 2

1

您没有发布相关代码,因此很难判断您的代码有什么问题

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

迭代时调用remove() on iterator而不是调用list.remove(obj)

编辑:

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

于 2012-08-24T02:58:54.837 回答
0

文档指出:

The iterators returned by this class's iterator and listIterator methods are fail-fast: if the list is structurally modified at any time after the iterator is created, in any way except through the iterator's own remove or add methods, the iterator will throw a ConcurrentModificationException.

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

于 2012-08-24T03:00:18.330 回答