2

特定のアイテムを反復して削除する必要があるリストがあります。イテレータでは機能しないアイテム ( などls.getStatus()) ごとにメソッドを呼び出す必要があるため、イテレータを使用できません。ls.getStatus() == 0そのアイテムを削除する必要がある場合。どうすれば回避できConcurrentModificationExceptionますか?

for (MyList ls : list) {
    if (ls.getStatus() == 0) {
        ls.run();
        list.remove();
    } else {
        ls.create();
    }
}

ありがとう

4

3 に答える 3

5

イテレータを使用できると思いませんか?

Iterator<MyList> i = list.iterator();
while (i.hasNext()) {
    MyList ls = i.next();

    //... all your other code which uses ls...

    i.remove();
}

iterator.remove()を使用すると、 で必要なリスト内のアイテムを検索する必要がなくなるため、このアプローチも高速になる可能性がありlist.remove(item)ます。

于 2012-02-19T19:45:09.637 に答える
1

イテレータを使用できますが、強化された for ループを放棄することによってのみ可能です:

for (Iterator<MyList> iterator = list.iterator(); iterator.hasNext(); ) {
    MyList ls = iterator.next();
    if (ls.getStatus() == 0) {
        lo.run(zo);
        iterator.remove();
    } else {
        ls.create();
    }
}

もちろん、それはlistremove 操作をサポートする型を参照することを前提としています。

于 2012-02-19T19:43:38.673 に答える
-1

イテレータが削除操作をサポートしていない場合は、次のアルゴリズムを使用できます。

最初のステップでは、削除する要素のインデックスのリストを作成するリストを反復処理できます。次のステップは、インデックスのリストを逆方向に繰り返し処理し、インデックスごとに要素を削除することです。

于 2012-02-19T19:48:27.430 に答える