🔥
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}
}
}
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