コレクションフレームワークとは
コレクションとは、複数のオブジェクトが集まったオブジェクトのこと。
フレームワークとは骨組み、枠組みといった意味。
これらを組み合わせると、複数の要素が集まったオブジェクトを操作するための
統一された枠組みになる。
Collectionインタフェース
コレクションフレームワークは、コレクションは要素であるオブジェクトのグループを表すCollectionインタフェースを実装する。
しかし、実際にCollecitonインタフェースを実装している訳ではなく、より用途の限定されたサブインタフェースの実装として
提供されている。
++特徴++
・コレクション階層のルートインタフェース
・コレクション内のオブジェクトの特別な順序はない
・同じオブジェクトへの参照を複数保持することができる
Listインタフェース(ArrayList/LinkedList/Vector)
順序付けられたコレクション。
整数値の添え字によって要素にアクセスしたり、リス対の要素を取得したりすることができる。
リストは重複する要素を許可し、また複数のnull要素の挿入も許可する。
++特徴++
・Collectionインタフェースを実装する
・コレクション内のオブジェクトを順番で管理できる
・同じオブジェクトへの参照を複数保持することができる
・nullを保持することができる
ArrayList(java.util.ArrayList)
ArrayListは最も使われているフレームワークの1つで、Listインタフェースのサイズ変更可能な配列の実装になる。
この
クラスは、Listインタフェースを実装するほか、リストを格納するために内部的に使われている配列のサイズを操作するメソッドを提供する。
主なメソッド
・addメソッド
リストの最後に、指定された要素を追加する
・addAllメソッド
リストの末尾に、指定されたCollecitonの全ての要素を追加する
・clearメソッド
リストからすべての要素を削除する
・getメソッド
指定した位置にあるリストの要素を返す
・isEmptyメソッド
リストが空であるか否かを真偽値で返す
・removeメソッド
指定した要素番号のリストを削除する
・sizeメソッド
リスト内にある要素の数を返す
ArrayListの使い方
List<String> al = new ArrayList<String>();
al.add("A");
al.add("B");
System.out.println(al.get(0));
System.out.println(al.get(1));
for(int i=0; i<al.size(); i++){
str=(String)al.get(i);
System.out.println(i+"要素は"+str);
}
ArrayListの注意点
・無効な要素へアクセスすると、例外IndexOutOfBoundsExceptionがスローされる
・配列のサイズが分かれば、0番目の要素から順に全ての要素へアクセスすることが出来る。
ArrayListのgetメソッドは戻り値をobject型で返すので、適切なオブジェクト型へ
キャストから受け取る必要がある。
Setインタフェース(HashSet/TreeSet)
重複要素のないコレクション。数学の「集合」に相当する。
++特徴++
・Collectionインタフェースを実装する
・重複要素を保持できない
・コレクション内のオブジェクトの順番を管理することができない
HashSet(java.util.HashSet)
HashSetは、HashMapのインスタンスを基づくSetインタフェースを実装する。
このクラスでは、セットの繰り返し順序について保証はしない。
主なメソッド
・addメソッド
指定された要素が既にSetに存在しなければ、その要素をセットする。
・clearメソッド
セットからすべての要素を削除する
・containsメソッド
指定された値がセットに含まれるか否かを真偽値で返す
・isEmptyメソッド
セットが空であるか否かを真偽値で返す
・iteratorメソッド
セットの要素の反復子を返す
・removeメソッド
指定した要素があればセットから削除する
・sizeメソッド
セット内にある要素の数を返す
HashSsetの使い方1
HashSet hs = new HashSet();
for(int i=1;i<=10;i++){
hs.add(new Integer(i));
}
for(int i=1;i<=10;i++){
hs.add(new Integer(i));
}
System.out.println("Size:" + hs.size());
System.out.println("HashSet:" + hs);
解説
HashSetへ1~10のIntegerオブジェクトを2回格納して、最後に要素数と全要素を出力している。
HashSetは重複する要素を格納することが出来ないため、20回Integerオブジェクトを格納したにも拘らず、
要素数は10個になる。
また、HashSetはどのような順序で格納されるか保障されていないため、格納順ではなくバラバラに出力される。
HashSsetの使い方2(HashSetへの全要素へアクセス)
Set hs = new HashSet();
hs.add("A");
hs.add("B");
hs.add("C");
iterator it = hs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
解説
- HashSetの全要素へアクセスするにはまず、HashSetのインスタンスからiteratorインタフェースを取得する。
iteratorインタフェースはコレクションの反復子で、この要素へアクセスしHashSetの全要素を取得することが出来る。
- hashNext()は、Iteratorが繰り返し時に、さらに要素があるか否かで真偽値を返す。
- next()は、繰り返しで次の要素を取り出す。
繰り返す処理でそれ以上要素がない場合、NoSuchElementExceptionをスローする。
Mapインタフェース(HashMap/TreeMap)
キーと値の対になる要素を持ったオブジェクト。各キーは1つの値にしかマッピング出来ず、
マップには同一のキーを複数登録することは出来ない。しかし、異なるキーで値が同じ値を登録することが出来る。
TreeMapクラスなど一部のマップの実装では、要素の順序について保証するが、
HashMapクラスなどの実装ではどのような順序で要素が登録されているか保障されない。
++特徴++
- Collectionインタフェースを実装しない
- コレクション内のオブジェクトに名前をつけて管理することが可能
- 同じオブジェクトへの参照を複数保持することができる
HashMap(java.util.HashMap
HashMapもArrayList同様、多く使われているフレームワークの1つで、Mapインタフェースのハッシュテーブルに基づく実装。
値を名前付きで管理することが出来るので、簡易的なデータベースのような使い方も可能。
ただし、HoashMapではマップの順序については保証しない。
主なメソッド
- clear ⇒ 全てのマッピングをマップから削除する
- containskey ⇒ 指定したマップが存在するか否かを真偽値で返す
- keyset ⇒ マップに格納されているキーのセットビューを返す
- get ⇒ 指定したキーにマップされている値を返す
- isEmpty ⇒ マップが空であるか否かを真偽値で返す
- put ⇒ 指定の値と指定されたキーをこのマップに関連付ける
- remove ⇒ キーに対応したマップがあれば削除する
- size ⇒ マップの要素の数を返す
- values ⇒ マップに格納されている値のコレクションビューを返す
使い方
Map hm = new HashMap();
hm.put("1","Jan");
hm.put("2","Feb");
hm.put("3","Mar");
hm.put("4","Apr");
hm.put("5","May");
hm.put("6","Jun");
System.out.println(hm);
解説
HashMapへのデータ登録はputメソッドを使用する。第1引数にキー値を、第2引数に値を指定。
今回は1~6までのStringオブジェクトと、その付に対応した文字列(Jan等)をHashMapへセットした。
実行結果で分かるように、HashMapでは格納した要素がどのような順番で取り出されるかは保障していない。
使い方(HashMapへの全要素へアクセス)
Map hm = new HashMap();
String strKey;
String strVal;
hm.put("1","Jan");
hm.put("2","Feb");
hm.put("3","Mar");
hm.put("4","Apr");
hm.put("5","May");
hm.put("6","Jun");
iterator it = hm.keySet().iterator();
while(it.hasNext()){
strKey = (String)it.next();
strVal = (String)hm.get(strKey);
System.out.println("キー:"+strKey);
System.out.println(" 値:"+valKey);
}
解説
HashMapの全要素へアクセスする方法は色々あるが、ここではHashMapからキーを保持する。
Setを取得し、次にそのSetからIteratorを取り出している。Iteratorが取得できていれば、
それに対して繰り返しを行ってキー値を取得し、キー値から値を取得している。
Iteratorインタフェース
コレクション内の要素に順番にアクセスする手段を提供。
コレクション・フレームワーク内のクラスは何らかの手段でこのIteratorインタフェースを使用できる
主なメソッド
- hasNext() ⇒ 繰り返し処理において、次の要素がある場合にtrueを返す
- next() ⇒ 繰り返し処理において、次の要素を返す
- remove() ⇒ 繰り返し処理において呼び出された、最後の要素を削除する
フォーマット
for(Iterator i = c.iterato(); i.hasNext();){
}
①iteratorメソッドを使用し、Iterator変数iに反復子を代入する
②hasNext()を使用し、次の要素がある場合(tureを返す場合)for文処理を続ける
Iterator i = c.iterator();
while(i.hasNext()){
}
①iteratorメソッドを使用し、Iterator変数iに反復子を代入する
②hasNextメソッドを使用し、次の要素がある間(trueを返す間)while文を続ける
最終更新:2009年12月25日 17:41