🧩 セット (Set) の使い方

セット (Set) は、重複する要素を一切含まないコレクションです。数学の「集合」と同じ概念であり、要素の重複を許さず、格納された要素の順序も基本的に保証されません。

1. セットの主な特徴

  1. 重複禁止: 同じ要素を複数回追加しようとしても、最初に追加された一つだけが保持されます。
  2. 順序不定: 要素が格納された順番は保証されません。(ただし、実装クラスによっては順序を持つものもあります)。
  3. 高速な検索: 特定の要素がセット内に存在するかどうかの確認(検索)が非常に高速です。

2. セットの宣言と主な実装クラス

Setもインターフェースであり、通常は**HashSetTreeSet**のいずれかを実装して使います。

Java

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

// 最も一般的なSet。順序は保証されないが、処理速度が速い。
Set<String> uniqueItems = new HashSet<>();

// 要素を自然順序(数値やアルファベット順)またはカスタム順序でソートして保持する。
// Set<Integer> sortedNumbers = new TreeSet<>();

3. 基本的な操作

SetListと似たメソッドを持ちますが、インデックス(添え字)による操作はできません。

操作メソッド説明
追加set.add(要素)要素を追加します。重複する場合はfalseを返します。
存在確認set.contains(要素)要素がセット内に存在するかどうかを boolean で返します。
削除set.remove(要素)指定した要素を削除します。
サイズset.size()現在の要素数を取得します。

💻 実行例

以下の例では、重複した要素(”Banana”)を追加しようとしても、無視されることがわかります。

Java

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

public class SetExample {
    public static void main(String[] args) {
        Set<String> fruits = new HashSet<>();

        // データの追加
        fruits.add("Apple"); 
        fruits.add("Banana");
        fruits.add("Cherry");
        
        // 重複する要素の追加を試みる
        boolean added = fruits.add("Banana"); 

        System.out.println("重複要素の追加に成功したか: " + added); // 出力: false
        System.out.println("現在のサイズ: " + fruits.size());      // 出力: 3 (Bananaは1つだけ)

        // 要素の存在確認
        if (fruits.contains("Apple")) {
            System.out.println("Appleはセット内にあります。");
        }

        // 削除
        fruits.remove("Banana");
        
        // 繰り返し処理(順序は保証されない)
        for (String fruit : fruits) {
            System.out.println("残りの果物: " + fruit);
        }
        // 出力例: 残りの果物: Apple, 残りの果物: Cherry (順序は実行環境により異なる)
    }
}

4. Setの主な用途

  1. 重複の除去: リストなどから重複した要素を簡単に取り除き、一意な値の集合を作りたい場合。
  2. 高速な存在チェック: 「この要素がデータ集合内に含まれているか?」というチェック(containsメソッド)を頻繁に行う場合。