🔥

Java Silver 強化②コレクションSet と Map

に公開

1. Set (重複を許可しないコレクション)

Set は、要素の重複を許可しないコレクションです。
List のように順番を保証するものではなく、同じ要素を追加しようとしても無視されます。

主な実装クラス

  • HashSet → 順序が保証されない、高速な検索
  • LinkedHashSet → 挿入順を保持
  • TreeSet → 自然順序または Comparator による順序

特徴:

  • 重複を許可しない
  • インデックスを持たない(順番通りに取得はできない)
  • 要素の検索が高速 (HashSet の場合)

例:Set の使用

import java.util.*;

public class SetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("Java");
        set.add("Python");
        set.add("Java"); // 追加されない(重複不可)

        System.out.println(set); // [Java, Python] (順序は保証されない)
    }
}

2. Map (キーと値のペアを管理)

Map は、キーと値のペア(key-value)を管理するデータ構造です。
キーは重複不可であり、各キーに対応する値を格納できます。

主な実装クラス

  • HashMap → 順序が保証されない、高速な検索
  • LinkedHashMap → 挿入順を保持
  • TreeMap → キーを昇順にソート

特徴:

  • キーは一意(重複不可)、値は重複可能
  • 検索が高速 (HashMap の場合)
  • キーを使って値を取得

例:Map の使用

import java.util.*;

public class MapExample {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "Java");
        map.put(2, "Python");
        map.put(1, "C++"); // キー「1」の値が「C++」に上書きされる

        System.out.println(map.get(1)); // C++
        System.out.println(map); // {1=C++, 2=Python}
    }
}

SetMap の違い

比較項目 Set Map
重複の可否 不可 (同じ要素は追加されない) キーは不可、値は可
要素の管理 単一の値 を管理 キーと値のペア を管理
データ取得 要素の検索 (contains()) キーを指定して値を取得 (get())
順序 基本的に保証されない (LinkedHashSet は挿入順を保持) HashMap は順序保証なし、LinkedHashMap は挿入順、TreeMap はキーの昇順
代表的な実装 HashSet, TreeSet, LinkedHashSet HashMap, TreeMap, LinkedHashMap

ポイント

  1. Set は重複を許可しない(同じ値を追加しても1つしか保持されない)
  2. Map のキーは重複不可、値は重複OK
  3. HashSetHashMap は順序を保証しない (LinkedHashSet, LinkedHashMap なら順序保持)
  4. TreeSetTreeMap は昇順にソートされる

Discussion