List / Map / Set の基本概念(インターフェース) — データ構造選択
Javaのコレクションフレームワークには「データをどう扱うか」を決める基本インターフェースが用意されています。代表的なのが List, Set, Map。それぞれの特徴を理解すると「どの構造を選ぶべきか」が分かりやすくなります。
List — 順序付きの集合
特徴
- 要素は 順序を持つ(インデックスでアクセス可能)。
- 重複を許す。
- 配列に似ているが、サイズが可変。
主な実装
- ArrayList: 配列ベース。ランダムアクセスが速い。
- LinkedList: 連結リストベース。挿入・削除が速い。
基本操作
import java.util.*;
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("A"); // 重複OK
System.out.println(list.get(0)); // "A"
System.out.println(list.size()); // 3
Java👉 順序や重複を扱いたいときは List。
Set — 重複なしの集合
特徴
- 要素は 重複しない。
- 順序は保証されない(ただし実装による)。
- 「集合」や「ユニーク値」を表すのに便利。
主な実装
- HashSet: 順序なし。高速。
- LinkedHashSet: 追加順を保持。
- TreeSet: ソート順を保持。
基本操作
import java.util.*;
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 重複は無視される
System.out.println(set.size()); // 2
System.out.println(set.contains("B")); // true
Java👉 重複を排除したいときは Set。
Map — キーと値の対応表
特徴
- キーと値のペアを保持。
- キーは重複不可、値は重複可。
- 辞書や連想配列のような構造。
主な実装
- HashMap: 順序なし。高速。
- LinkedHashMap: 追加順を保持。
- TreeMap: キーをソート順で保持。
基本操作
import java.util.*;
Map<String, Integer> map = new HashMap<>();
map.put("apple", 100);
map.put("banana", 200);
map.put("apple", 150); // キー重複 → 値が上書きされる
System.out.println(map.get("apple")); // 150
System.out.println(map.containsKey("banana")); // true
Java👉 キーで値を管理したいときは Map。
例題で練習
例題1: List で順序を保持
List<String> tasks = new ArrayList<>();
tasks.add("起床");
tasks.add("朝食");
tasks.add("出勤");
for (String t : tasks) {
System.out.println(t);
}
// 出力順は追加順
Java👉 順序通りに処理したいときは List。
例題2: Set で重複排除
Set<String> emails = new HashSet<>();
emails.add("a@example.com");
emails.add("b@example.com");
emails.add("a@example.com"); // 重複は無視
System.out.println(emails.size()); // 2
Java👉 ユニークな値だけを扱いたいときは Set。
例題3: Map で辞書を作る
Map<String, String> dictionary = new HashMap<>();
dictionary.put("cat", "猫");
dictionary.put("dog", "犬");
System.out.println(dictionary.get("dog")); // "犬"
Java👉 キーで検索して値を取り出すときは Map。
テンプレート集
List
List<Type> list = new ArrayList<>();
list.add(value);
Type v = list.get(index);
JavaSet
Set<Type> set = new HashSet<>();
set.add(value);
boolean exists = set.contains(value);
JavaMap
Map<KeyType, ValueType> map = new HashMap<>();
map.put(key, value);
ValueType v = map.get(key);
Javaまとめと選び方
- List: 順序あり、重複あり → 並べたいとき。
- Set: 順序なし(実装次第)、重複なし → ユニーク値管理。
- Map: キーと値のペア → 辞書や検索表。
👉 練習課題として「社員名簿を List」「メールアドレスを Set」「商品価格表を Map」で作ってみると、業務ロジックに直結した理解が深まります。
