ホームページ >Java >&#&チュートリアル >Java で反復中にコレクションから要素を安全に削除するにはどうすればよいですか?

Java で反復中にコレクションから要素を安全に削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-13 09:10:19875ブラウズ

How to Safely Remove Elements from a Collection While Iterating in Java?

反復中にコレクションから要素を削除する

コレクションを操作する場合、反復中に要素を変更または削除する必要があります。ただし、反復中にコレクションを変更すると、ConcurrentModificationException が発生する可能性があります。これを回避するには、いくつかの方法があります。

コレクションのコピーを反復する

1 つの方法は、反復する前にコレクションのコピーを作成することです。これにより、元のコレクションに影響を与えることなくコピーを変更できます。以下に例を示します。

List<Foo> fooListCopy = new ArrayList<>(fooList);
for (Foo foo : fooListCopy) {
    // Modify actual fooList
}

実際のコレクションのイテレータの使用

別のアプローチは、実際のコレクションのイテレータを使用することです。このアプローチにより、反復中にコレクションを変更できます。以下に例を示します。

Iterator<Foo> itr = fooList.iterator();
while (itr.hasNext()) {
    // Modify actual fooList using itr.remove()
}

アプローチを選択する際の考慮事項

これらのアプローチのどちらを選択するかは、いくつかの要因によって決まります。

  • コレクション タイプ: 最初のアプローチは任意のコレクションで機能しますが、2 番目のアプローチはコレクションでのみ機能します。イテレータをサポートするコレクション (リスト、セットなど)。
  • 可読性: 最初のアプローチは、特に初心者にとって、読みやすく理解しやすいかもしれません。
  • パフォーマンス: 2 番目のアプローチは、ファイルのコピーを作成する必要がないため、より効率的です。 collection.
  • サポートされていない削除操作: Iterator.remove() メソッドはオプションであるため、すべてのイテレーターが要素の削除をサポートしているわけではありません。最初のアプローチでは、代わりに Collection.removeAll() メソッドを使用することでこの問題を回避します。

要素を削除するための追加テクニック

これらのアプローチに加えて、Java 8 では、反復中に要素を削除するための他の手法がいくつか提供されています。以下を含みます:

  • ストリームベースの削除:collect() を使用して、removeIf() や filter() などのストリーム操作を使用します。
  • ListIterator: ListIterator.next() を使用して反復処理し、ListIterator.remove() を使用して削除するelements.
  • サブリストまたはサブセット: コレクションが並べ替えられている場合、サブリストまたはサブセットを作成してクリアすると、連続する要素を効率的に削除できます。

以上がJava で反復中にコレクションから要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。