ホームページ > Java > &#&チュートリアル > Java で複数のリスト間で共通要素を効率的に見つけるにはどうすればよいですか?

Java で複数のリスト間で共通要素を効率的に見つけるにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-02 03:31:09
オリジナル
177 人が閲覧しました

How Can I Efficiently Find Common Elements Between Multiple Lists in Java?

複数のリストからの共通要素の決定

Java では、複数のリストに共有される共通要素を検索する必要が生じる場合があります。これは、データ セットの比較や交差部分の特定などのタスクに役立つ操作です。この記事では、Java のコレクション フレームワークを使用して 2 つのリスト間の共通要素を取得する効率的な方法について説明します。

まず、それぞれ 3 つの整数を含む 2 つの ArrayList オブジェクトがあるシナリオを考えてみましょう。目標は、両方のリストに存在する要素を検索して返すことです。

解決策: Collection#retainAll()

これを達成する最も簡単な方法の 1 つこれは Collection#retainAll() メソッドを使用することによって行われます。このメソッドは、指定されたコレクション パラメーターにも存在しないすべての要素を削除することによって、呼び出し元のコレクションを変更します。

listA.retainAll(listB);
ログイン後にコピー

上記のコードを実行すると、listA には listA と listB の両方に共通する要素のみが含まれます。 .

代替アプローチ: 新しいコレクションを作成する

必要な場合listA の元の内容を保持したまま、共通要素を含む新しいコレクションを作成できます。

List<Integer> common = new ArrayList<>(listA);
common.retainAll(listB);
ログイン後にコピー

この場合、共通リストには listA と listB の両方に存在する要素のみが含まれます。 listA の元の内容はそのまま残ります。

ストリームベースのソリューション

Java 8 では、コレクションを処理および操作する宣言的な方法を提供する強力なストリーム API。 stream#filter() メソッドを利用して、特定の述語に基づいて要素をフィルタリングできます。

List<Integer> common = listA.stream().filter(listB::contains).toList();
ログイン後にコピー

このストリームベースのアプローチは、listA 内の各要素に対してフィルタ操作を実行し、それが listB に存在するかどうかを確認します。 contains() メソッド。結果のリストには、listA と listB の間の共通要素のみが含まれます。

以上がJava で複数のリスト間で共通要素を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート