「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

Java開発では、List・Map・Set の3種類のコレクションを正しく使い分けることが、
可読性・性能・バグ防止に大きく影響します。

しかし、「どれを使えばいいのか?」
「違いが分かりにくい」
と感じる人も多いはず。

この記事では、Javaの主要コレクションを最速で判断できるように整理しました。


1. List / Map / Set の違いを一言でまとめると?

コレクション重複順序主な用途
Listあり保持する(順序が重要)順番通りに複数のデータを扱う
Setなし(ユニーク)基本なし重複排除/存在チェックを高速化
MapKey はユニークKey の順序なしキーと値のペア管理(辞書型)

2. List(リスト)とは?

■ 特徴

  • 順序を保持

  • 重複を許可

  • インデックスでアクセス可能(list.get(0)

■ 主な実装クラス

実装特徴
ArrayList均等なアクセスが高速。最も使用頻度が高い
LinkedList追加・削除が多い場合に有利
CopyOnWriteArrayListスレッドセーフ。読み取りが圧倒的に多い時

■ サンプルコード

■ List が向いている用途

  • 順序通りに表示したい

  • 重複も許容したい(ログ、履歴、検索結果)

  • 数字の index でアクセスしたい


3. Set(セット)とは?

■ 特徴

  • 重複を許可しない

  • 順序なし

  • 存在確認が高速(内部でハッシュを使用)

■ 主な実装クラス

実装特徴
HashSet高速(最もよく使う)
LinkedHashSet追加順序を保持
TreeSet自然順序(ソート)で保持

■ サンプルコード

■ Set が向いている用途

  • 重複排除(メールアドレス一覧、IDリスト)

  • 存在チェックを高速化したい

  • 順序は不要


4. Map(マップ)とは?

■ 特徴

  • Key と Value の組み合わせ

  • Key はユニーク(重複不可)

  • 値は重複OK

  • 辞書・連想配列として利用

■ 主な実装クラス

実装特徴
HashMap最も高速で一般的
LinkedHashMap追加順序を保持
TreeMapKey をソートして保存
ConcurrentHashMapスレッドセーフで高速

■ サンプルコード

■ Map が向いている用途

  • キー(コード、ID、文字列)で検索したい

  • キーと値のペアを保持したい

  • ルックアップ(高速検索)が必要


5. List / Set / Map の性能比較

処理内容List(ArrayList)Set(HashSet)Map(HashMap)
追加普通とても速いとても速い
検索遅い(線形探索)速い(ハッシュ)速い(Key検索)
重複管理手動で実施自動で排除Key をユニークに管理

6. よくある用途別おすすめ

✔ データを順番通りに並べたい

List

✔ 重複を排除したい

Set

✔ 検索を高速化したい

Set / Map

✔ キーと値で管理したい

Map

✔ ID → オブジェクト を高速アクセスしたい


✔ 「存在するか?」を高速で判定したい



7. 実務での使い分けフローチャート


8. List・Set・Map の注意点(実務でよくあるミス)

■ equals() と hashCode() を正しく実装していない

Set や Map のキーにオブジェクトを使うなら必須。

■ LinkedList を無闇に使う

ほとんどの場合 ArrayList の方が速い

■ Map のループ時に entrySet を使わない

これは性能に影響する典型的な間違い。


9. まとめ:迷ったらこのルールでOK

  • 順序 + 重複 → List

  • 重複なし → Set

  • キーと値 → Map

  • 検索性能が必要 → Set / Map(Hash 系)

  • 並列処理 → CopyOnWriteArrayList / ConcurrentHashMap

これだけ覚えておけば、実務の 90% は対応できます。

Ads by Google