反復中にコレクション要素を削除する際の ConcurrentModificationException の回避
概要
同時実行中のコレクションの変更それを反復処理すると、次のような予期しない動作が発生する可能性があります。 ConcurrentModificationException。この問題を回避するには、さまざまなアプローチを使用できます。
アプローチ 1: コレクションのコピーを反復処理する
1 つの方法は、コレクションのコピーを作成して反復処理することです。元のコレクションの代わりにそのコピーを使用します。これにより、反復中に元のコレクションが変更されなくなります。
例:
List<Foo> fooListCopy = new ArrayList<>(fooList); for (Foo foo : fooListCopy) { // Modify the actual fooList }
アプローチ 2: コレクション反復子の使用
もう 1 つのアプローチは、元のコレクションによって提供されるイテレータを使用することです。イテレーターは、コレクションを走査し、反復中に要素を削除するための安全な方法を提供します。
例:
Iterator<Foo> itr = fooList.iterator(); while (itr.hasNext()) { // Modify the actual fooList using itr.remove() }
JDK 8 またはHigher
選択に関する考慮事項
最適なアプローチは、特定のシナリオによって異なります。
追加の考慮事項:
以上が反復中にコレクションから要素を削除するときに ConcurrentModificationException を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。