Javaのコレクション、どれ使えばいいの?使い分けや違いを一覧で紹介!

投稿 2022年5月5日

更新 2022年5月5日

専門用語の数:

Javaのコレクション、どれ使えばいいの?使い分けや違いを一覧で紹介!

~ 目次 ~

背景

コレクションの種類と特徴

自分なりのコレクションの決め方

各実装クラスの特徴一覧

まとめ

背景

Javaのコレクションは、ありがたいことにたくさんあります。

便利な反面結局どれ使えば一番いいのか、わかりにくかったりします。

そして何より、ちょっと使ってないと、ふと忘れます。

なので簡単にまとめてみました。

コレクションの種類と特徴

改めてJavaのコレクションの種類とその特徴を超簡単にまとめます。

List

インデックス(管理番号)で管理して保持します。

順序に焦点を当てたコレクションです。

Map

キーと値を紐づけて保持します。

データの紐づけに焦点を当てたコレクションです。

Set

重複しない値を保持します。

重複データを作成しないところに焦点を当てたコレクションです。

Queue・Deque

FIFO・LIFOです。

要素の最初・最後に焦点を当てたコレクションです。

自分なりのコレクションの決め方

実装クラスを知っていると、実は順序はどのコレクションでも保持はできます。

つまり順序を保持するかしないかは、あまり意識はしなくても大丈夫です。

なので私は以下の順番で決めていってます。

1, キーと値の紐づけが必要か?

2つ以上の値を紐づけないといけないのなら、Map一択です。

やろうと思えば他のコレクションでもできますが、可読性が落ちます。

2, 重複値をどうするか?

同じ値を1つしか保持しない場合Set一択です。

2つ以上保持する場合はList・Queue・Dequeですね。

3, 途中の要素を操作するかどうか?

途中の要素を一切触らないのであれば、Queue・Deque一択です。

用途が定まらないとか、全体的に操作する可能性があるのあれば、List・Setですね。

4, パフォーマンス最適解はどれか?

最後いきなり難しくなりましたけど、どういうデータ操作傾向かを見ます。


データ挿入・参照・変更・削除の量や位置、

その変数の利用用途によって変わってくるので、

残りの選択肢の中からベストな型を選んでます。


超雑な早見表はこんな感じです。

参照が多い ArrayList
変更が多い LinkedList
順序保持が不要 HashMap
HashSet
挿入順保持が必要 LinkedHashMap
LinkedHashSet
ソートが必要 TreeMap
TreeSet
PriorityQueue
ソートが不要 ArrayDeque

各実装クラスの特徴一覧

最後に改めて各実装クラスの特徴をまとめておきます。

各インターフェースの特徴は省略しています。

List 特徴
ArrayList 要素参照速度が速く、変更速度が遅い
LinkedList 要素参照速度が遅く、変更速度が速い
Map 特徴
HashMap 順序を保持しない
LinkedHashMap 挿入順、またはアクセス順を保持
TreeMap 自動順序、または独自実装順序でソート
Set 特徴
HashSet 順序を保持しない
LinkedHashSet 挿入順を保持
TreeSet 自動順序、または独自実装順序でソート
Queue・Deque 特徴
ArrayDeque 両端キュー(FIFO・LIFO)
PriorityQueue 自動順序、または独自実装順序でソートしたFIFO

まとめ

Javaのコレクションの一覧の紹介と、自分なりの選び方でした。

正直自分でも使いこなせてないです。

だからこそ、自分なりに改めてまとめてみました。

コレクションを使いこなせれば、本当に世界変わりました(実体験)

自分の中で明確に、「プログラムがわかってきた」と感じれたので、

是非マスターできるようにしてみてはどうでしょうか?


以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント一覧

コメントがまだありません

コメントを投稿してみる

コメント(必須※500文字以内)

お名前(必須※30文字以内)

※日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)