要約
Collectionクラスには主に3つのインターフェイスが用意されています。
- List : 順番通りに格納 (ex. ArrayList, LinkedList)
- Set : バラバラに格納 (ex. HashSet, TreeSet)
- Map :Keyに対応づけて格納 (ex. HashMap, TreeMap)
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 | 格納不可 |
しない | ソート | 自動でする |
参考になれば幸いです!
いいねをお待ちしてます!