HOWTO · Java

Java で集合交差を見つける

この記事では、Java で集合の共通部分を見つける方法を紹介します。

このページの内容

Set という用語は、java.util パッケージに含まれるインターフェースです。セットは、順序付けされていないリストを格納するコレクションインターフェイスであり、重複するエンティティの格納を許可しません。数学的には、set インターフェイスには 3つのプロパティがあります。

  1. セット内の要素は null ではありません。
  2. セット内の 2つの要素を等しくすることはできません。
  3. セットは挿入順序を保持しません。

Java で Set Insertion を使用して SetIntersection を検索する

以下のプログラムを見ると、Java でセットを挿入し、2つのセット間の共通部分を見つけることができます。

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class SetIntersection {
  public static void main(String[] args) {
    Set<Integer> s1 = new HashSet<>();
    s1.add(2);
    s1.add(7);
    s1.add(1);
    System.out.println("Set1: " + s1);
    List list = Arrays.asList(1, 7, 6, 8);
    Set<Integer> s2 = new HashSet<>(list);
    System.out.println("Set2: " + s2);
    Set<Integer> intersection = new HashSet<>(s1);
    intersection.retainAll(s2);
    System.out.println("Intersection: " + intersection);
  }
}

上記のコードでは、セットはプロセスの最初のステップとして宣言されています。new HashSet は HashSet クラスの新しいインスタンスを作成し、形成された参照を Set インスタンスに割り当てます。HashSet のデフォルト容量は 16 で、負荷率は 0.75 です。HashSet クラスは Set インターフェイスと互換性があります。これは、HashSet が内部で Set インターフェイスを実装しているためです。

変数 s1 は、add メソッドを使用して初期化されます。この関数は、オブジェクトが null でなく、重複していないことを考慮して、定義されたタイプのオブジェクトを Set インスタンスに追加します。この関数は、値が挿入されているかどうかに基づいてブール値を返します。指定された要素のクラスが Set インスタンスのクラスと類似していない場合、関数は ClassCastException をスローします。要素が null 値の場合は NullPointerException をスローし、要素の一部のプロパティが Set コレクションへの追加を禁止している場合は IllegalArgumentException をスローします。

セットを作成する別の方法は、HashSet コンストラクターパラメーターに渡された list インスタンスを使用することです。リストは、Arrays クラスの asList メソッドを使用して、定義された値で初期化されます。リストのインスタンスは、HashSet コンストラクターのパラメーターとして渡されます。Set コレクションは、要素が格納される順序を保持しません。

セットの別のインスタンスは、コンストラクターパラメーターとして s1 インスタンスを使用してインスタンス化されます。現在、この intersection 参照は、retainAll 関数である別のメソッドを呼び出します。この関数は、インスタンスと呼び出されたインスタンスの呼び出しに存在する要素のみを保持します。retain 操作でセットが変更されると、メソッドはブール値 true を返します。セットに対する操作をサポートしていない場合は、UnsupportedOperationException をスローします。互換性のないセットタイプがある場合は ClassCastException をスローし、セットに null 要素が含まれている場合は NullPointerException をスローします。

上記のセット間の共通部分の出力は次のとおりです。

出力:

Set1: [1, 2, 7]
Set2: [1, 6, 7, 8]
Intersection: [1, 7]