Set: 重複なしの集合
重複を自動排除。HashSet, TreeSet, LinkedHashSet。
Set
重複なしの集合。
HashSet
O(1) で高速。順序なし。
TreeSet
ソート済み。O(log n)。
Set
import java.util.HashSet;import java.util.Set;
// HashSet の作成Set<String> fruits = new HashSet<>();
// 要素の追加fruits.add("Apple");fruits.add("Banana");fruits.add("Apple"); // 重複は無視
// サイズSystem.out.println(fruits.size()); // 2
// 存在チェックif (fruits.contains("Apple")) { System.out.println("Apple exists");}
// 削除fruits.remove("Banana");
// ループfor (String fruit : fruits) { System.out.println(fruit);}実行結果
2\nApple exists\nApple
Bad
// ❌ Bad: List で重複チェック (O(n))List<String> list = new ArrayList<>();if (!list.contains(item)) { list.add(item); // 遅い}Good
// ✅ Good: Set で自動重複排除 (O(1))Set<String> set = new HashSet<>();set.add(item); // 重複は自動で無視パターン
// LinkedHashSet: 挿入順序を保持Set<String> ordered = new LinkedHashSet<>();ordered.add("C");ordered.add("A");ordered.add("B");// 出力: C, A, B(挿入順)
// TreeSet: ソート済みSet<String> sorted = new TreeSet<>();sorted.add("C");sorted.add("A");sorted.add("B");// 出力: A, B, C(ソート順)
// 集合演算Set<Integer> a = Set.of(1, 2, 3);Set<Integer> b = Set.of(2, 3, 4);
// 和集合Set<Integer> union = new HashSet<>(a);union.addAll(b); // {1, 2, 3, 4}
// 積集合Set<Integer> intersection = new HashSet<>(a);intersection.retainAll(b); // {2, 3}
// 差集合Set<Integer> diff = new HashSet<>(a);diff.removeAll(b); // {1} Tip: 順序が必要なら LinkedHashSet、ソートなら TreeSet。
合格ライン
HashSet vs TreeSet の違いを説明できる
集合演算ができる
参考リンク
演習課題
課題1: HashSet 操作
HashSet で重複を除去してください。
課題2: 集合演算
2つの Set で和集合・積集合を求めてください。