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

时间:2012-08-24 02:57:35

标签: java arraylist loops

我有一个包含StoreItem对象的ArrayList,这些对象具有特定的名称,如gum,socks,candy等。我需要迭代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);
       }
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

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

编辑:

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

答案 1 :(得分:0)

documentation州:

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方法。