ヘッダー画像

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

投稿 2022年5月5日 最終更新 2022年5月5日 専門用語多め

背景

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

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

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

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

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

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

List

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

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

Map

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

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

Set

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

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

Queue・Deque

FIFO・LIFOです。

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

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

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

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

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

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

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

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

重複値をどうするか?

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

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

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

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

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

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

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

データ挿入・参照・変更・削除の量や位置、
その変数の利用用途によって変わってくるので、
残りの選択肢の中からベストな型を選んでます。

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

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

各実装クラスの特徴一覧

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

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

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

まとめ

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

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

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

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

自分の中で明確に、「プログラムがわかってきた」と感じれたので、
是非マスターできるようにしてみてはどうでしょうか?

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

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

コメント

この記事のコメントはありません。