セット (Set) は、重複する要素を一切含まないコレクションです。数学の「集合」と同じ概念であり、要素の重複を許さず、格納された要素の順序も基本的に保証されません。
1. セットの主な特徴
- 重複禁止: 同じ要素を複数回追加しようとしても、最初に追加された一つだけが保持されます。
- 順序不定: 要素が格納された順番は保証されません。(ただし、実装クラスによっては順序を持つものもあります)。
- 高速な検索: 特定の要素がセット内に存在するかどうかの確認(検索)が非常に高速です。
2. セットの宣言と主な実装クラス
Setもインターフェースであり、通常は**HashSetかTreeSet**のいずれかを実装して使います。
Java
import java.util.HashSet;
import java.util.Set;
// 最も一般的なSet。順序は保証されないが、処理速度が速い。
Set<String> uniqueItems = new HashSet<>();
// 要素を自然順序(数値やアルファベット順)またはカスタム順序でソートして保持する。
// Set<Integer> sortedNumbers = new TreeSet<>();
3. 基本的な操作
SetはListと似たメソッドを持ちますが、インデックス(添え字)による操作はできません。
| 操作 | メソッド | 説明 |
| 追加 | 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の主な用途
- 重複の除去: リストなどから重複した要素を簡単に取り除き、一意な値の集合を作りたい場合。
- 高速な存在チェック: 「この要素がデータ集合内に含まれているか?」というチェック(
containsメソッド)を頻繁に行う場合。

