今回はJavaのコレクションについてのまとめと、よく使うクラスについて特徴をまとめていきます。
コレクションクラスとは
コレクションとは、要素数が決まっていない複数の要素をまとめて処理することができるオブジェクトです。コレクションと似たものに配列がありますが、配列は要素数が不変であり後から要素を追加したりすることができません。
コレクションを操作するためのAPIはコレクションフレームワークと呼ばれています。コレクションフレームワークには、それぞれ異なる特徴を持つインターフェイスがあります。インターフェイス毎に複数のクラスが実装されています。(ArrayListクラスなど)
ここでは代表的な3つのインターフェイスを取り上げます。
- Listインターフェイス(要素の重複が可能・要素の順番を保持して格納する)
- Setインターフェイス(要素の重複が不可能)
- Mapインターフェイス(キーと値を関連付けて格納する)
これからインターフェイスと実装クラスを順に説明していきます。
Listインターフェイス
Listインターフェイスを実装するクラスとしてよく使われるものに、「ArrayList」「LinkedList」が存在します。
ArrayListクラス
ArrayListは配列と似たリスト構造を持っているため、インデックス値で要素に素早くアクセスできます。
- 要素を追加するスピードが遅い
- 要素にアクセスするスピードが速い
といった特徴があります。
LinkedListクラス
LinkedListは、要素同士を双方向のリンクで参照する集合です。そのため要素の挿入や削除はArrayListに比べて高速です。
- 要素を追加するスピードが速い
- 要素にアクセスするスピードが遅い
といった特徴を持ちます。
Setインターフェイス
Setインターフェイスを実装するクラスとしてよく使われるものに、「HashSet」「TreeSet」が存在します。
HashSetクラス
HashSetはハッシュ値を使うことで高速な操作性を実現しています。
- 要素の順番が保持されない
- 要素の重複は許されない
といった特徴があります。
TreeSetクラス
TreeSetはHashSetより低速ですが、自動的に要素がソートされる特徴を持ちます。そのままだと昇順でソートされますが、ソートの条件は指定することもできます。
- 要素が自動的にソートされる
- 要素の重複は許されない
といった特徴があります。
Mapインターフェイス
Mapインターフェイスを実装するクラスとしてよく使われるものに、「HashMap」「TreeMap」「LinkedHashMap」が存在します。
それぞれKey(キー)とValue(値)が一対一で対応しています。Keyが重複した場合、Valueは上書きされます。
HashMapクラス
HashMapはハッシュ値を使うことで高速に動作します。
- KeyからValueを高速に検索できる
- 要素の順番は保持されない
といった特徴があります。
TreeMapクラス
TreeMapは自動的に要素が昇順でソートされる特徴を持ちます。ソートの条件は指定することもできます。
- 要素が自動的にソートされる
といった特徴があります。
LinkedHashMap
LinkedHashMapは要素の順番が追加した順番で保持されます。
- 要素の順番が保持される
といった特徴があります。
まとめ
今回はコレクションでよく使われるインターフェイスと各実装クラスについてまとめました。
各インターフェイスとクラス毎に特徴が異なるので、用途に合わせて使うものを選択できますね。