我有一个包含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);
}
}
}
答案 0 :(得分:1)
您没有发布相关代码,因此很难说出您的代码有什么问题
但是,避免CME的方法之一是
在迭代时调用remove() on iterator
而不是调用list.remove(obj)
编辑:
不要用于:each,使用迭代器遍历列表,然后在想要执行删除时在迭代器上调用remove()。
答案 1 :(得分: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
方法。