1. Top
  2. Java SE
  3. コレクション

コレクション

コレクションフレームワークとは

コレクションフレームワークとは何でしょうか?
先ず、「コレクション」とは複数のオブジェクトが集まったオブジェクトを指します。 次に「フレームワーク」ですが、これは 骨組み・枠組み といった意味合いを持っています。 これらを組み合わせると、「コレクションフレームワーク」とは、複数の要素が集まったオブジェクトを操作するための統一された枠組みになります。

Javaでは複数の要素を扱う場合、配列以外にコレクションフレームワークとしていくつかのクラスを提供しています。どのようなクラスがあってどのように使用するかは以降で順次説明していきます。

Collectionインタフェース

先ずコレクションフレームワークはコレクションは要素であるオブジェクトのグループを表す Collectionインターフェースを実装します。しかし、実際に Collectionインタフェースを実装しているわけではなく、より用途の限定されたサブインタフェース(後述)の実装として提供されています。

また Collectionインタフェースは主に以下の特徴があります。

・「コレクション階層」のルートインタフェース
・コレクション内のオブジェクトの特別な順序はない
・同じオブジェクトへの参照を複数保持することができる


ページの先頭へ

Listインタフェース ( ArrayList / LinkedList / Vector )

順序付けられたコレクションです。 整数値の添え字によって要素にアクセスしたり、リスト内の要素を取得したりすることができます。リストは重複する要素を許可し、また複数のnull要素の挿入も許可します。

・Collectionインターフェースを実装する
・コレクション内のオブジェクトを順番で管理できる
・同じオブジェクトへの参照を複数保持することができる
・nullを保持することができる

ArrayList

ArrayListは最も使われているフレームワークの一つで、List インタフェースのサイズ変更可能な配列の実装になります。 このクラスは、List インタフェースを実装するほか、リストを格納するために内部的に使われる配列のサイズを操作するメソッドを提供します。

ArrayListの主なメソッド

add リストの最後に、指定された要素を追加します。
addAll リストの末尾に、指定された Collection のすべての要素を追加します。
clear リストからすべての要素を削除します。
get 指定した位置にあるリストの要素を返します。
isEmpty リストが空であるか否かを真偽値で返します。
remove 指定した要素番号のリストを削除します。
size リスト内にある要素の数を返します。

ArrayListの使い方

public static void main(String[] args){
    
    ArrayList al = new ArrayList();
    
    al.add("鈴木さん");
    al.add("佐藤さん");
    al.add("木村さん");
    al.add("田中さん");
    al.add("浅井さん");
    
    System.out.println("0番目の要素は" + al.get(0) + "です。");
    System.out.println("4番目の要素は" + al.get(4) + "です。");
    
}

【実行結果】
0番目の要素は鈴木さんです
4番目の要素は浅井さんです。

ArrayListへのデータ登録は addメソッドを使用します。挿入位置をしていないので、末尾から順に引数で指定した要素が ArrayListに追加されていきます。

ArrayListも配列と同じで、要素番号は 0から始まります。 つまり格納されている要素数 -1 が有効な要素番号となります。 無効な要素番号へアクセスすると、例外 IndexOutOfBoundsExceptionがスローされます。

ArrayListの全要素へアクセス

public static void main(String[] args){
    
    String strName;
    
    ArrayList al = new ArrayList();
    
    al.add("鈴木さん");
    al.add("佐藤さん");
    al.add("木村さん");
    al.add("田中さん");
    al.add("浅井さん");
    
    for(int i=0; i
【実行結果】
0番目の要素は鈴木さんです。
1番目の要素は佐藤さんです。
2番目の要素は木村さんです。
3番目の要素は田中さんです。
4番目の要素は浅井さんです。

ArrayListは要素番号が順に割り当てられているので、配列同様サイズが分かれば 0番目の要素から順に全ての要素へアクセスすることが出来ます。 一点注意したいのがオレンジでマークしてある箇所になります。 ArrayListの getメソッドは戻り値を Object型で返すので、適切なオブジェクト型へキャストから受け取る必要があります。

ページの先頭へ

Mapインタフェース ( HashMap / TreeMap )

キーと値の対になる要素を持ったオブジェクトです。 各キーは1つの値にしかマッピング出来ず、マップには同一のキーを複数登録することは出来ません。しかし、異なるキーで値が同じ値を登録することが出来ます。

TreeMap クラスなど一部のマップの実装では、要素の順序について保証しますが、HashMap クラスなどの実装ではどのような順序で要素が登録されているか保証されません。

・Collectionインターフェースを実装しない
・コレクション内のオブジェクトに名前を付けて管理することが可能
・同じオブジェクトへの参照を複数保持することができる

HashMap

HashMapも ArrayList同様、多く使われているフレームワークの一つで、Map インタフェースのハッシュテーブルに基づく実装です。 値を名前付きで管理することが出来るので、簡易的なデータベースのような使い方も可能です。ただし、HashMapではマップの順序については保証しません。

HashMapの主なメソッド

clear 全てのマッピングをマップから削除します。
containsKey 指定したマップが存在するか否かを真偽値で返します。
keySet マップに格納されているキーのセットビューを返します。
get 指定したキーにマップされている値を返します。
isEmpty マップが空であるか否かを真偽値で返します。
put 指定の値と指定されたキーをこのマップに関連付けます。
remove キーに対応したマップがあれば削除します。
size マップの要素の数を返します。
values マップに格納されている値のコレクションビューを返します。

HashMapの使い方

public static void main(String[] args){
    
    HashMap hp = new HashMap();
    
    hp.put("1" , "Jan");
    hp.put("2" , "Feb");
    hp.put("3" , "Mar");
    hp.put("4" , "Apr");
    hp.put("5" , "May");
    hp.put("6" , "Jun");
    hp.put("7" , "Jul");
    hp.put("8" , "Aug");
    hp.put("9" , "Sep");
    hp.put("10" , "Oct");
    hp.put("11" , "Nov");
    hp.put("12" , "Dec");
    
    System.out.println("HashMap : " + hp);
    
}

【実行結果】
HashMap : {10=Oct, 3=Mar, 5=May, 7=Jul, 2=Feb, 11=Nov, 9=Sep, 4=Apr, 8=Aug, 12=Dec, 6=Jun, 1=Jan}


HashMapへのデータ登録は putメソッドを使用します。第一引数にキー値を、第二引数に値を指定します。今回は 1~12までの Stringオブジェクトと、その付に対応した文字列( Jan等 )を HashMapへセットしました。 [ 出力結果 ] で分かるように、HashMapでは格納した要素がどのような順番で取り出されるかは保障していません。

HashMapの全要素へアクセス

public static void main(String[] args){
    
    String strKey;
    String strVal;
	
    HashMap hp = new HashMap();
    
    hp.put("1" , "Jan");
    hp.put("2" , "Feb");
    hp.put("3" , "Mar");
    hp.put("4" , "Apr");
    hp.put("5" , "May");
    hp.put("6" , "Jun");
    hp.put("7" , "Jul");
    hp.put("8" , "Aug");
    hp.put("9" , "Sep");
    hp.put("10" , "Oct");
    hp.put("11" , "Nov");
    hp.put("12" , "Dec");
    
    Iterator it = hp.keySet().iterator();
    
    while(it.hasNext()){
        strKey = (String)it.next();
        strVal = (String)hp.get(strKey);
        System.out.print("キー:" + strKey);
        System.out.println(" 値:" + strVal);
    }
}

【実行結果】
キー:10 値:Oct
キー:3 値:Mar
キー:5 値:May
キー:7 値:Jul
キー:2 値:Feb
キー:11 値:Nov
キー:9 値:Sep
キー:4 値:Apr
キー:8 値:Aug
キー:12 値:Dec
キー:6 値:Jun
キー:1 値:Jan



HashMapの全要素へアクセスする方法は色々あるのですが、上記サンプルでは先ず HashMapからキーを保持する Setを取得し、次にその Setから Iteratorを取り出しています。 Iteratorが取得できていれば、それに対して繰り返しを行ってキー値を取得し、キー値から値を取得しています。



ページの先頭へ