コレクションは、たくさんのインスタンスを管理する目的を持った
クラスやインターフェースの総称です。
コレクションフレームワークとも呼ばれます。
コレクションに含まれる代表格として、
- ArrayList
- LinkedList
- HashSet
- HashMap
などが存在します。
以下より順に見ていきます。
ArrayList
ArrayList は、要素を追加したり削除したりすると
自動的にサイズとインデックスが調整される配列のようなものです。
import java.util.ArrayList;
import java.util.List;
public class ArrayListSample {
public static void main(String args[]) {
//ArrayListの生成とデータのセット
List<String> al = new ArrayList<String>();
al.add("A");
al.add("B");
al.add("C");
al.add("B");
//ArrayListを1件ずつ取り出し画面に表示する
for (String alphabet : al) {
System.out.println(alphabet);
}
// C のインデックスを表示
System.out.println("Cの位置: " + al.indexOf("C"));
// サイズを表示
System.out.println("サイズ: " + al.size());
// 2番目に新たに文字列を挿入
System.out.println();
System.out.println("2番目に新たに文字列を挿入");
al.add(2, "X");
System.out.println();
//変更後の結果を表示
for (String alphabet : al) {
System.out.println(alphabet);
}
System.out.println("変更後のCの位置: " + al.indexOf("C"));
System.out.println("変更後のサイズ: " + al.size());
}
}
出力結果
A
B
C
B
Cの位置: 2
サイズ: 4
2番目の位置に新たに文字列を挿入
A
B
X
C
B
変更後のCの位置: 3
変更後のサイズ: 5
なぜArrayList のインスタンスを List 型で宣言するのか
上記の例で
List<String> al = new ArrayList<String>();
と宣言する理由をこちらの記事にまとめました。
LinkedList
LinkedList は、要素の挿入や削除を高速に行うことのできる
クラスです。
ArrayList と比べ、挿入と削除は高速に行いますが、
指定したインデックスにある要素を参照する速度は低速です。
import java.util.LinkedList;
import java.util.List;
public class LinkedListSample {
public static void main(String args[]) {
//LinkedListの生成とデータのセット
List<String> ll = new LinkedList<String>();
ll.add("A");
ll.add("B");
ll.add("C");
ll.add("C");
//LinkedListを1件ずつ取り出し画面に表示する
Iterator<String> it = ll.iterator();
while (it.hasNext()) {
System.out.println((String)it.next());
}
}
}
出力結果
A
B
C
C
キューの用途に使われる
挿入と削除が高速であるという理由で、
常に要素が末尾に追加され、先頭から取り出されていく
キューとして用いられるよう、LinkedList は
Queue インターフェースも実装しています。
スタックの用途にも使われる
上記と同様の理由で、
常に要素が先頭に追加され、先頭から取り出されていく
スタックとしての用途にも使われます。
ArrayList と LinkedList の違い
HashSet
HashSet は、順番を意識せずに、ある要素が
含まれているかどうかだけを調べることのできる集合です。
同じ要素を重複させることは出来ないようになっています。
import java.util.HashSet;
import java.util.Iterator;
public class HashSetSample {
public static void main(String args[]) {
//HashSetデータを作成
HashSet<String> hs = new HashSet<String>();
hs.add("Z");
hs.add("Y");
hs.add("Y");
hs.add("X");
hs.add(null);
//画面表示
Iterator<String> it = hs.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
出力結果
null
Y
X
Z
同じ値は上書きされます。また要素の順番は保証されないので、格納順とは限りません。
HashMap
HashMap は、キーと値の対応関係を表すクラスです。
キーから値への関係性は一方向で、キーは重複させることが
出来ないようになっています。
import java.util.HashMap;
public class HashMapSample {
public static void main(String args[]) {
//HashMapデータを作成
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("name", "Taro");
hm.put("address", "Tokyo");
hm.put("tel", "999-999-9999");
//get メソッドでそれぞれのキーに紐づく値を取得
System.out.println("name: " + hm.get("name"));
System.out.println("tel: " + hm.get("tel"));
System.out.println("aaa: " + hm.get("aaa"));
}
}
出力結果
name: Taro
tel: 999-999-9999
aaa: null
null: null
その他
他にも
- Vector
- Stack
- HashTable
などがありますが、上から順にそれぞれ
- ArrayList
- LinkedList
- HashMap
に代替され、使われる機会は少ないです。