0

ガム、靴下、キャンディーなどの特定の名前のStoreItemオブジェクトを含むArrayListがあります。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 を回避する方法の 1 つは、

呼び出す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 に答える