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

Javaで2つのSetをマージする方法【サンプルコード付き】

Javaで2つのセット(Set)を1つにマージ(結合)する方法を解説します。ここでは、Stream APIとaddAllメソッドを組み合わせた基本的なアプローチを紹介し、あわせてより簡潔に書ける代替手段も取り上げます。

コード例

import java.util.stream.*;
import java.util.*;
import java.io.*;

public class Demo {

    public static <T> Set<T> set_merge(Set<T> set_1, Set<T> set_2) {
        Set<T> my_set = set_1.stream().collect(Collectors.toSet());
        my_set.addAll(set_2);
        return my_set;
    }

    public static void main(String[] args) {
        Set<Integer> my_set_1 = new HashSet<>();
        my_set_1.addAll(Arrays.asList(new Integer[] { 34, 67, 89, 102 }));

        Set<Integer> my_set_2 = new HashSet<>();
        my_set_2.addAll(Arrays.asList(new Integer[] { 77, 11, 0, -33 }));

        System.out.println("1つ目のセットの内容: " + my_set_1);
        System.out.println("2つ目のセットの内容: " + my_set_2);
        System.out.println("マージ後のセット: " + set_merge(my_set_1, my_set_2));
    }
}

実行結果

1つ目のセットの内容: [34, 67, 102, 89]
2つ目のセットの内容: [0, -33, 11, 77]
マージ後のセット: [0, -33, 34, 67, 102, 89, 11, 77]

コードの解説

Demoクラスには、set_mergeというジェネリックな静的メソッドが定義されています。このメソッドは、引数として渡された2つのセットを受け取り、まず1つ目のセットをCollectors.toSet()で新しいセットにコピーしたうえで、addAllメソッドによって2つ目のセットの全要素を追加しています。

mainメソッド内では、HashSetのインスタンスを2つ生成し、Arrays.asListaddAllを使ってそれぞれ整数の要素を追加しています。最後に、各セットの内容とマージ結果がコンソールに出力されます。

なお、HashSetは要素の順序を保証しないため、実行環境やJavaのバージョンによって出力される要素の並び順は変わる可能性があります。重複する要素は自動的に除外され、1つだけ保持される点もSetの重要な特徴です。

別のマージ方法

1. コンストラクタとaddAllを組み合わせる

Stream APIを使わず、よりシンプルに書くこともできます。既存のセットをコピーして新しいセットを作り、そこへもう一方を追加するだけです。

Set<Integer> merged = new HashSet<>(my_set_1);
merged.addAll(my_set_2);

2. Stream.concatを使う方法

Java 8以降では、Stream.concatを使って2つのストリームを連結し、その結果をSetに収集する方法もあります。

Set<Integer> merged = Stream.concat(my_set_1.stream(), my_set_2.stream())
                           .collect(Collectors.toSet());

どちらの方法でも元のセットは変更されず、マージ結果を持つ新しいSetが生成されます。処理の意図が明確になるため、単純な結合であればコンストラクタ+addAllの組み合わせが最も可読性が高いと言えるでしょう。

  1. Javaで2つのJSONオブジェクトをマージする方法【putAll()メソッドの使い方】

    JSON(JavaScript Object Notation)は軽量なデータ交換フォーマットであり、そのデータは「キーと値のペア」で構成されています。JSONObjectは文字列からテキストを解析し、Mapのようなオブジェクトを生成することができ、java.util.Mapインターフェースをサポートしています。Javaでは、org.json.simple.JSONObjectクラスを利用することで、2つのJSONオブジェクトを簡単にマージ(結合)できます。以下のプログラムでは、java.util.Mapインターフェースから継承されたputAll()メソッドを使用して、2つのJSONオブジェク

  2. Pythonのセット(set)とは?作成・操作・結合の基本を徹底解説

    Pythonのセット(set)は、順序を持たない(unordered)コレクション型で、重複のない一意な(unique)かつ変更不可能な(immutable)オブジェクトを格納します。つまり、セットに同じ要素を複数入れることはできず、一度作成した要素そのものを書き換えることもできません。 ポイント: セットの「要素」はイミュータブル(変更不可)ですが、セット自体はミュータブル(変更可能)です。そのため、後から要素の追加や削除を行うことは可能です。 セットは順序を保持しません。同じセットを何度 print しても、表示される要素の並び順が変わることがあります。 Pythonでは、セットを波括弧