Java で集合交差を見つける
Set
という用語は、java.util
パッケージに含まれるインターフェースです。セットは、順序付けされていないリストを格納するコレクションインターフェイスであり、重複するエンティティの格納を許可しません。数学的には、set インターフェイスには 3つのプロパティがあります。
- セット内の要素は null ではありません。
- セット内の 2つの要素を等しくすることはできません。
- セットは挿入順序を保持しません。
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]
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn