【Java】List・Set・Mapの違いとは?特徴と使い分けを解説!

当ページのリンクには広告が含まれています。
目次

はじめに

Javaでプログラムを開発する際、多くの場面でデータの管理が必要になります。そのときに便利なのが コレクションフレームワーク です。コレクションフレームワークを活用することで、配列よりも柔軟にデータを格納・操作できます。

特に List・Set・Map は、Javaでよく使われる代表的なコレクションです。これらの特徴をよく知り、状況に応じてうまく使い分けることで実装を楽にすることができます。

本記事では、 List・Set・Mapの違い をわかりやすく解説し、どのような場面で使い分けるべきかを紹介します。初心者でも理解しやすいように具体例も交えて説明するので、ぜひ参考にしてください。

List・Set・Mapとは?

どっち,比較

特徴

  • List: 順序があるコレクション(重複OK)
  • Set: 重複を許さないコレクション(順序は保証されない or 特定のルールで管理)
  • Map: キーと値の組み合わせで管理するコレクション(キーの重複不可)

比較表

特徴ListSetMap
順序ありなし(または特定の順序)キーに依存
重複許可許可しない・キーは不可、値は可
・同意キーの場合は値が上書きされる
主な実装クラスArrayList, LinkedListHashSet, TreeSetHashMap, 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 の基本的な使い方

出力

Banana
Apple
Orange
Banana

ポイント

  • 順序が保たれる
  • 重複を許容する
  • インデックスでアクセス可能

HashSet を使った重複排除

出力

Apple
Orange
Banana
Apple is in the set.

ポイント

  • 重複は追加されない
  • 順序は保証されない(TreeSetLinkedHashSet なら順序管理も可能)

HashMap でのキーと値の管理

出力

Appleの値段: 150
Bananaは在庫あり!
Apple の値段は 150 円
Orange の値段は 200 円
Banana の値段は 150 円

ポイント

  • データへのアクセスはキーで可能
  • キーの重複は不可(既存のキーに値を追加すると上書きされる)
  • 値の重複は可能

まとめ

  • 各々に適した用途で使用することを検討する。
    • List:順序性のあるデータ
    • Set:一意性のあるデータ
    • Map:キーと値の組み合わせのデータ
  • 選んだデータ構造によって何を意図しているのかをコードとして示すことができる。

参考

Java Silverでもコレクションフレームワークについて取り扱っています。これからJavaを学んでいくという方は取得を検討してもよいと思います。

Java Silverはきちんと勉強すれば取れる資格です。確実に取得したい方は参考にしてください。

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰。
現在はフリーランスエンジニア兼コアファクトリ合同会社代表。
得意な言語はJava。

新人教育経験あり(わからなくて進まない子を放置しない方針)
Javaの新人教育にお困りでしたらお声がけください。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次