Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでセットが別のセットのサブセットかどうかを判定する方法


この記事では、あるセット(Set)が別のセットのサブセット(部分集合)であるかどうかを判定する方法を解説します。

Setとは、重複する要素を含むことができないコレクションであり、数学における集合の概念をモデル化したものです。SetインターフェースにはCollectionインターフェースから継承されたメソッドのみが定義されており、そこに「重複要素を禁止する」という制約が追加されています。

サブセットの判定には、containsAll()メソッドを使用します。このメソッドは、引数に渡したコレクションのすべての要素が、呼び出し元のコレクションに含まれている場合にtrueを返します。

処理内容のデモ

以下に入力例と、それに対して期待される出力を示します。

入力:

1つ目のセット: [90, 75, 60, 45]
2つ目のセット: [90, 60]

期待される出力:

一方のセットは他方のサブセットか?
true

アルゴリズム

ステップ1 - 処理を開始する
ステップ2 - 必要な変数を宣言する
ステップ3 - 値を定義する
ステップ4 - 2つのSetを作成し、「add」メソッドで要素を追加する
ステップ5 - セットの内容をコンソールに表示する
ステップ6 - boolean型の変数を用意し、一方のセットに対して「containsAll」メソッドを呼び出す
ステップ7 - これにより、一方のセットが他方のサブセットであるかどうかが判定される
ステップ8 - サブセットであればtrue、そうでなければfalseが返る
ステップ9 - 判定結果をコンソールに表示する
ステップ10 - 処理を終了する

例1: すべての処理をmainメソッドに記述するパターン

ここでは、すべての操作をmainメソッドの中にまとめて記述します。

import java.util.HashSet;
import java.util.Set;

public class Demo {
    public static void main(String[] args) {
        System.out.println("必要なパッケージがインポートされました");
        Set<Integer> input_set_1 = new HashSet<>();
        input_set_1.add(45);
        input_set_1.add(60);
        input_set_1.add(75);
        input_set_1.add(90);
        System.out.println("1つ目のセット: " + input_set_1);
        Set<Integer> input_set_2 = new HashSet<>();
        input_set_2.add(60);
        input_set_2.add(90);
        System.out.println("2つ目のセット: " + input_set_2);
        boolean result = input_set_1.containsAll(input_set_2);
        System.out.println("\n一方のセットは他方のサブセットか? \n" + result);
    }
}

実行結果

必要なパッケージがインポートされました
1つ目のセット: [90, 75, 60, 45]
2つ目のセット: [90, 60]

一方のセットは他方のサブセットか?
true

例2: オブジェクト指向スタイルで関数にカプセル化するパターン

次に、サブセット判定の処理を独立した関数として切り出し、オブジェクト指向プログラミングの形式で記述します。

import java.util.HashSet;
import java.util.Set;

public class Demo {
    static void is_subset(Set<Integer> input_set_1, Set<Integer> input_set_2){
        boolean result = input_set_1.containsAll(input_set_2);
        System.out.println("\n一方のセットは他方のサブセットか? \n" + result);
    }
    public static void main(String[] args) {
        System.out.println("必要なパッケージがインポートされました");
        Set<Integer> input_set_1 = new HashSet<>();
        input_set_1.add(45);
        input_set_1.add(60);
        input_set_1.add(75);
        input_set_1.add(90);
        System.out.println("1つ目のセット: " + input_set_1);
        Set<Integer> input_set_2 = new HashSet<>();
        input_set_2.add(60);
        input_set_2.add(90);
        System.out.println("2つ目のセット: " + input_set_2);
        is_subset(input_set_1, input_set_2);
    }
}

実行結果

必要なパッケージがインポートされました
1つ目のセット: [90, 75, 60, 45]
2つ目のセット: [90, 60]

一方のセットは他方のサブセットか?
true

補足ポイント

  • containsAll()はCollectionインターフェースに定義されたメソッドのため、ListやSetなど任意のコレクションに対して使用できます。
  • HashSetは要素の順序を保証しないため、表示される順序は実行環境によって異なる場合があります。
  • 空のセットは、あらゆるセットのサブセットとみなされます(containsAll()はtrueを返します)。

  1. Javaで台形の面積を求めるプログラムの作成方法を解説

    この記事では、Javaを使って台形(トラペジウム)の面積を求める方法について詳しく解説します。台形とは、少なくとも1組の対辺が互いに平行になっている四角形のことです。平行な2つの辺は「底辺」と呼ばれ、平行でない残りの2つの辺は「脚」と呼ばれます。英語圏では trapezoid(トラペゾイド)と呼ばれることもあります。 台形の面積は、次の公式を使って計算できます。 面積 = (高さ ÷ 2) × (上底 + 下底) すなわち、 面積 = ½ × (平行な2辺の長さの合計) × (平行な2辺間の垂直距離) 以下に具体的なイメージを示します。平行な2辺の長さを a、b、台形の高さを h としたとき

  2. JavaのJSliderでエクステント(extent)を設定する方法

    SwingのJSliderでは、スライダーのエクステント(extent)を設定するためにsetExtent()メソッドを使用します。エクステントとは、スライダーのつまみ(ノブ)がカバーする範囲のサイズのことで、この値を設定すると、ユーザーはスライダーをその範囲以上に移動できなくなります。setExtent()メソッドの基本的な使い方以下のように、JSliderオブジェクトに対してsetExtent()メソッドを呼び出すだけで、エクステントを設定できます。JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 70); slider.se