LoginSignup
1
1

More than 1 year has passed since last update.

[Java] Collectionクラスまとめ ~List, Set, Mapの実装と使い方~

Last updated at Posted at 2023-02-05

要約

Collectionクラスには主に3つのインターフェイスが用意されています。

List

Listはインターフェースと呼ばれる抽象メソッドのみをもったものです。
Listはあくまでもインタフェースであるため、インスタンスの生成ができません。

よって、以下のようには書けません。

//間違い
List<Integer> list = new List<Integer>();

Listインターフェイスを実装したクラスはArrayList, LinkedList, Stackなどがあります。

ArrayList

ArrayListはListインタフェースを実装したコレクションクラスです。

//初期化
List<Integer> al = new ArrayList<Integer>();

//n番目の要素を取得
al.get(n);

//n番目に"value"を追加
al.add(n, "value");

//n番目の要素を"hoge"に置き換える
al.set(n,"hoge");

//n番目の要素を削除する
al.remove(n);

//リストの要素に"hoge"があるかどうかを判定する
al.contains("hoge");

//リストの要素数がゼロであるかどうかを判定する(bool)
al.isEmpty();

//リストの要素数を取得する
al.size();

//全削除
al.clear();

上記のように使用します。

LinkedList

LinkedListもListインタフェースを実装したコレクションクラスです。

//初期化
List<Integer> ll = new LinkedList<Integer>();

//n番目の要素を取得
ll.get(n);

//n番目に"value"を追加
ll.add(n, "value");

//n番目の要素を"hoge"に置き換える
ll.set(n,"hoge");

//n番目の要素を削除する
ll.remove(n);

//リストの要素に"hoge"があるかどうかを判定する
ll.contains("hoge");

//リストの要素数がゼロであるかどうかを判定する(bool)
ll.isEmpty();

//リストの要素数を取得する
ll.size();

//全削除
ll.clear();

上記のように使用します。

ArrayList vs LinkedList

ArrayListとLinkedListの違いは下記の表の通りです。

ArrayList LinkedList
速い 検索 遅い
遅い 挿入・削除 速い

参考:@BumpeiShimadaさんの LinkedList と ArrayList の使い分け方

Set

Setは重複を許しません

Setはインターフェースという抽象的なものです。
Setはあくまでもインタフェースであるため、インスタンスの生成ができません。

よって、以下のようには書けません。

//間違い
Set<Integer> set = new Set<Integer>();

Setインターフェイスを実装したクラスには HashSet, TreeSetがあります。

HashSet

HashSetはSetインタフェースを実装したコレクションクラスです。

//初期化
Set<String> hs = new HashSet<String>();

//要素追加
hs.add("hoge");

//要素削除
hs.remove("hoge");

//全要素削除
hs.clear();

上記のように使用します。

TreeSet

TreeSetもSetインタフェースを実装したコレクションクラスです。

//初期化
Set<String> ts = new TreeSet<String>();

//要素追加
ts.add("hoge");

//要素削除
ts.remove("hoge");

//全要素削除
ts.clear();

上記のように使用します。

HashSet vs TreeSet

HashSetとTreeSetの違いは下記の表の通りです。

HashSet TreeSet
格納可 null 格納不可
しない ソート 自動でする

Map

Mapはキーの重複を許しません。キーが同じ場合、上書きされます。

Mapはインターフェースという抽象的なものです。
Mapはあくまでもインタフェースであるため、インスタンスの生成ができません。

よって、以下のようには書けません。

//間違い
Map<String, String> map = new Map<String, String>();

Mapインターフェイスを実装したクラスには HashMap, TreeMapがあります。

HashMap

HashMapはMapインタフェースを実装したコレクションクラスです。

//初期化
Map<String, String> hm = new HashMap<String, String>();

//検索
hm.get("Key1"); //なければnullが返る

//要素追加(キー、値)
hm.put("Key2", "value2");

//要素削除
hm.remove("Key3"); 

上記のように使用します。

TreeMap

TreeMapもMapインタフェースを実装したコレクションクラスです。

//初期化
Map<String> ts = new TreeMap<String>();

//検索
ts.get("Key1"); //なければnullが返る

//要素追加(キー、値)
ts.put("Key2", "value2");

//要素削除
ts.remove("Key3"); 

上記のように使用します。

HashMap vs TreeMap

HashMapとTreeMapの違いは下記の表の通りです。

HashMap TreeMap
格納可 null 格納不可
しない ソート 自動でする

参考になれば幸いです!
いいねをお待ちしてます!

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1