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を返します)。
-
Javaで台形の面積を求めるプログラムの作成方法を解説
この記事では、Javaを使って台形(トラペジウム)の面積を求める方法について詳しく解説します。台形とは、少なくとも1組の対辺が互いに平行になっている四角形のことです。平行な2つの辺は「底辺」と呼ばれ、平行でない残りの2つの辺は「脚」と呼ばれます。英語圏では trapezoid(トラペゾイド)と呼ばれることもあります。 台形の面積は、次の公式を使って計算できます。 面積 = (高さ ÷ 2) × (上底 + 下底) すなわち、 面積 = ½ × (平行な2辺の長さの合計) × (平行な2辺間の垂直距離) 以下に具体的なイメージを示します。平行な2辺の長さを a、b、台形の高さを h としたとき
-
JavaのJSliderでエクステント(extent)を設定する方法
SwingのJSliderでは、スライダーのエクステント(extent)を設定するためにsetExtent()メソッドを使用します。エクステントとは、スライダーのつまみ(ノブ)がカバーする範囲のサイズのことで、この値を設定すると、ユーザーはスライダーをその範囲以上に移動できなくなります。setExtent()メソッドの基本的な使い方以下のように、JSliderオブジェクトに対してsetExtent()メソッドを呼び出すだけで、エクステントを設定できます。JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 70); slider.se