この記事の目的
- コレクション(List / Set / Map)とは何かを直感的に理解する
- ジェネリクス(Generics)がなぜ必要なのかを例とともに理解する
- 初学者がつまずきやすいポイントを丁寧に解説する
- 実務で使う書き方・避けるべき書き方を知る
1. コレクションとは何か?
Java のコレクションは、複数のデータをまとめて扱うための仕組み。
- 配列と似ているが、以下の点で圧倒的に便利。
- 要素数が可変(増える・減る)
- 検索・追加・削除が簡単
- 用途に応じて List / Set / Map を使い分けられる
2. コレクションの三大分類
■ List(順序あり・重複 OK)
- 例:ArrayList, LinkedList
特徴:順番が大事なときに使う
実装例
List<String> names = new ArrayList<>();
names.add("Taro");
names.add("Hanako");
Set(順序なし・重複 NG)
- 例:HashSet, LinkedHashSet, TreeSet
特徴:重複を排除したいときに使う
Set<String> users = new HashSet<>();
users.add("A");
users.add("A"); // 無視される
Map(キーと値のペア)
- 例:HashMap, TreeMap
特徴:「キーで検索」したいときに使う
Map<String, Integer> scores = new HashMap<>();
scores.put("Math", 80);
scores.put("English", 90);
3. ジェネリクス(Generics)とは?
- 「このコレクションには何の型を入れるのか」を明確にする仕組み。
例:List
→ 「このリストには String しか入れません」という宣言。
なぜ必要なのか?
❌ ジェネリクスがないと…
List list = new ArrayList();
list.add("Hello");
list.add(123); // 整数も入ってしまう!?
- 値を取り出すときにキャストが必要。
- 何番目にどの型が代入されていたか覚えていないといけない。
- つまり、実行時エラーの原因になる。
⭕ ジェネリクスを使うと…
List<String> list = new ArrayList<>(); //入れてもいい型はStringだけ!
list.add("Hello")
// list.add(123); // コンパイルエラーで防げる
- 型安全が保たれる
- キャスト不要
- IDE の補完が効く
4. つまずきやすいポイント
❗ List と ArrayList の違い
- 左側(変数の型):インターフェース(List)
- 右側(実体):実装クラス(ArrayList)
→ 基本は左をインターフェースにするのがベストプラクティス
5.たとえてみると...
コレクションは「カバン」
- List:順番に並べて入れるリュック
- Set:同じ物は入れられないロッカー
- Map:名前札(キー)をつけて収納する棚
ジェネリクスは「カバンのラベル」
List<String> //「このカバンは“文字列専用”です」
→ ラベルがあるから、間違った物を入れようとすると怒られる(コンパイルエラー)
6.まとめ
✔ コレクションは「複数のデータを扱う仕組み」
✔ List / Set / Map の三種類
✔ ジェネリクスは「型を固定して安全にする仕組み」
✔ List のように型を明示するのが基本