5

ArrayList を反復処理しています。昔ながらの方法を使用する場合:

for (int i = 0; i < list.size(); i++)
{
    list.get(i).update();;
}

それは正常に動作します。しかし、これで:

for (Baseitem item : list)
{
    item.update();
}

ArrayList クラス内の最初の行で失敗します: スレッド "AWT-EventQueue-0" java.util.ConcurrentModificationException の例外 はい、外側では項目を削除しますが、反復中は確かにそうではありません。これを解決するには?私はスレッドを使用しません。

4

3 に答える 3

14

そのリストを反復している間は、リスト内の要素を変更することは避けてください。

ループではfor (int i...)、リストを反復していないため、内部の要素を変更できます。

ループではfor (Baseitem item : list)、リストを反復しているため、リストの要素を変更するとConcurrentModificationException例外が発生します。

ループ内の要素を変更する場合は、ループの最初の形式を使用する必要があります。

于 2013-06-12T14:08:26.537 に答える
1

for-each に関する重要な注意事項:

for-each ループは、コレクションと配列の両方で使用されます。これは、反復子またはインデックスが反復のみに使用され、コレクションまたは配列内のアイテムの削除または編集などの他の種類の操作には使用されない、反復の最も一般的な形式を単純化することを目的としています。選択肢がある場合は、読みやすさが向上するため、for ループよりも for-each ループを優先する必要があります。

あなたの場合、イテレータを使用することをお勧めします。

update()の方法も投稿できますBaseitemか?

于 2013-06-12T14:12:12.740 に答える