反復中に ArrayList から要素を削除する際の同時変更例外の回避
高度な for ループ (for-各ループ)、悪名高い ConcurrentModificationException が発生する可能性があります。これは、反復中に ArrayList から要素を削除しようとすると発生します。
原因:
for ループはリストのコピーを内部的に作成し、反復処理します。このコピー。元のリストから要素が削除されると、コピーのサイズがすぐに縮小され、その結果、現在の要素のインデックスが無効になります。
解決策:
この問題を回避するには、remove() メソッドとともにイテレータを使用します。
Iteratorアプローチ:
イテレーターは、コレクションの要素を反復処理するオブジェクトです。さらに要素があるかどうかを確認する hasNext や、次の要素を返す next などのメソッドがあります。イテレータを使用すると、反復中に安全に削除できます。
Iterator<String> iter = myArrayList.iterator(); while (iter.hasNext()) { String str = iter.next(); if (someCondition) iter.remove(); }
このアプローチでは、イテレータは内部状態を維持し、要素が削除された後でもインデックスが有効なままであることを保証します。 iter.remove() メソッドは、元のリストから現在の要素を安全に削除します。
注: このアプローチは、インデックスを必要としないため、従来の for ループを使用するよりも効率的です。個別のインデックス変数を維持し、削除するたびに更新します。
以上が反復中に ArrayList から要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。