はじめに
Javaでプログラムを開発する際、多くの場面でデータの管理が必要になります。そのときに便利なのが コレクションフレームワーク です。コレクションフレームワークを活用することで、配列よりも柔軟にデータを格納・操作できます。
特に List・Set・Map は、Javaでよく使われる代表的なコレクションです。これらの特徴をよく知り、状況に応じてうまく使い分けることで実装を楽にすることができます。
本記事では、 List・Set・Mapの違い をわかりやすく解説し、どのような場面で使い分けるべきかを紹介します。初心者でも理解しやすいように具体例も交えて説明するので、ぜひ参考にしてください。
List・Set・Mapとは?

特徴
- List: 順序があるコレクション(重複OK)

- Set: 重複を許さないコレクション(順序は保証されない or 特定のルールで管理)

- Map: キーと値の組み合わせで管理するコレクション(キーの重複不可)

比較表
特徴 | List | Set | Map |
---|---|---|---|
順序 | あり | なし(または特定の順序) | キーに依存 |
重複 | 許可 | 許可しない | ・キーは不可、値は可 ・同意キーの場合は値が上書きされる |
主な実装クラス | ArrayList, LinkedList | HashSet, TreeSet | HashMap, TreeMap |
使い分けのポイント

List・Set・Map は、それぞれ異なる特徴を持っており、状況に応じて適切に使い分けることでコードの見通しをよくします。
順番通りに扱いたい場合はList
Listは順次処理されるデータや何らかの順序になっているデータを扱う場合に適しています。
例えば、
- エラーメッセージの発生順にメッセージを保持する。
- タスクを登録日時で保持する。
- 顧客の注文履歴を注文日時で保持する。
などです。
このように、何らかの順序で扱いたい場合はListを検討してください。
Listを使っていることで、順序性のあるデータであることを示すことができます。
例えば、HogeOrderListという名前にしていれば、Hogeが注文順に並んでいるとわかります。また、HogeOrdersだと順序性のない集まりだと示すこともできます。
重複データを排除したい場合はSet
Setは重複しないデータの集まりを扱う場合に適しています。
Setに適したケースは、
- 重複しないデータの集合を扱いたい。
- 一意なデータを作りたい。
- 重複チェックすることなく重複を取り除きたい。
などです。
このように、一意なデータの集合を扱いたい場合はSetを検討してください。
また、Setは格納時に自動的に重複データを除外してくれるので重複チェックなどしなくてもよいことと、実装するクラス(TreeSet、LinkedHashSet)によっては順序を管理することも可能です。
Setを使っていることで一意性のあるデータを扱っていることがわかります。
例えば、ShippingDateSetだと発送日の一意な集合だとわかるというような感じです。
キーと値の組み合わせで管理したい場合はMap
Mapはキーと値の組み合わせで管理したい場合に適しています。
Mapに適したケースは、
- キーと付随するデータを扱いたい。
- Dictionaryに代わるものとして作られたので、辞書型として扱いたいデータ全般。
- 同一キーで異なるデータが複数あり、特定の順序の最後だけを扱いたい場合。(同一キーは値が上書きされる性質を利用)
などです。
このように、キーと値の組み合わせで扱いたい場合はMapを検討してください。
Mapはキーと値の組み合わせなので、重複しないキーと紐づくデータの集合であることを示せます。
例えば、CountyMapとなっていると国コードと国名称の組み合わせなのかなと推測することができます。ただ、HashMap<String, String>
だと実データを見ないとわからないので、HashMap<CountyCode, CountyyName>
というクラスを定義してあげるとよりわかりやすくなります。
具体的なコード例

ArrayList の基本的な使い方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.util.ArrayList; public class ArrayListExample { public static void main(String[] args) { ArrayList<String> fruits = new ArrayList<>(); // 要素の追加 fruits.add("Apple"); fruits.add("Banana"); fruits.add("Orange"); fruits.add("Banana"); // 重複可能 // 要素の取得 System.out.println(fruits.get(1)); // 出力: Banana // 要素の削除 fruits.remove("Banana"); // 削除されたのは最初に見つけたBanana // ループでの表示 for (String fruit : fruits) { System.out.println(fruit); } } } |
出力
Banana
Apple
Orange
Banana
ポイント
- 順序が保たれる
- 重複を許容する
- インデックスでアクセス可能
HashSet を使った重複排除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.HashSet; public class HashSetExample { public static void main(String[] args) { HashSet<String> uniqueFruits = new HashSet<>(); // 要素の追加(重複は無視される) uniqueFruits.add("Apple"); uniqueFruits.add("Banana"); uniqueFruits.add("Orange"); uniqueFruits.add("Banana"); // 重複は追加されない // ループでの表示 for (String fruit : uniqueFruits) { System.out.println(fruit); } // 要素の存在チェック if (uniqueFruits.contains("Apple")) { System.out.println("Apple is in the set."); } } } |
出力
Apple
Orange
Banana
Apple is in the set.
ポイント
- 重複は追加されない
- 順序は保証されない(
TreeSet
やLinkedHashSet
なら順序管理も可能)
HashMap でのキーと値の管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import java.util.HashMap; import java.util.Map; public class HashMapExample { public static void main(String[] args) { HashMap<String, Integer> productPrices = new HashMap<>(); // 要素の追加(キーと値の組み合わせ) productPrices.put("Apple", 150); productPrices.put("Banana", 150); productPrices.put("Orange", 120); productPrices.put("Orange", 200); // キーが重複するの値が上書きされる // 値の取得(キーを使って) System.out.println("Appleの値段: " + productPrices.get("Apple")); // 出力: 150 // キーの存在チェック if (productPrices.containsKey("Banana")) { System.out.println("Bananaは在庫あり!"); } // ループでの表示(キーと値を取り出す) for (Map.Entry<String, Integer> entry : productPrices.entrySet()) { System.out.println(entry.getKey() + " の値段は " + entry.getValue() + " 円"); } } } |
出力
Appleの値段: 150
Bananaは在庫あり!
Apple の値段は 150 円
Orange の値段は 200 円
Banana の値段は 150 円
ポイント
- データへのアクセスはキーで可能
- キーの重複は不可(既存のキーに値を追加すると上書きされる)
- 値の重複は可能
まとめ
- 各々に適した用途で使用することを検討する。
- List:順序性のあるデータ
- Set:一意性のあるデータ
- Map:キーと値の組み合わせのデータ
- 選んだデータ構造によって何を意図しているのかをコードとして示すことができる。
参考
Java Silverでもコレクションフレームワークについて取り扱っています。これからJavaを学んでいくという方は取得を検討してもよいと思います。
Java Silverはきちんと勉強すれば取れる資格です。確実に取得したい方は参考にしてください。

コメント