🔥
Java Silver 強化②コレクションSet と Map
Set
(重複を許可しないコレクション)
1. 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] (順序は保証されない)
}
}
Map
(キーと値のペアを管理)
2. 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}
}
}
Set
と Map
の違い
比較項目 | Set | Map |
---|---|---|
重複の可否 | 不可 (同じ要素は追加されない) | キーは不可、値は可 |
要素の管理 | 単一の値 を管理 | キーと値のペア を管理 |
データ取得 |
要素の検索 (contains() ) |
キーを指定して値を取得 (get() ) |
順序 | 基本的に保証されない (LinkedHashSet は挿入順を保持) |
HashMap は順序保証なし、LinkedHashMap は挿入順、TreeMap はキーの昇順 |
代表的な実装 |
HashSet , TreeSet , LinkedHashSet
|
HashMap , TreeMap , LinkedHashMap
|
ポイント
-
Set
は重複を許可しない(同じ値を追加しても1つしか保持されない) Map
のキーは重複不可、値は重複OK-
HashSet
やHashMap
は順序を保証しない (LinkedHashSet
,LinkedHashMap
なら順序保持) TreeSet
やTreeMap
は昇順にソートされる
Discussion