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


コレクションとは、複数のオブジェクトが集まったオブジェクトのこと。
フレームワークとは骨組み、枠組みといった意味。
これらを組み合わせると、複数の要素が集まったオブジェクトを操作するための
統一された枠組みになる。


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文を使用した場合
 for(Iterator i = c.iterato(); i.hasNext();){

 }
 ①iteratorメソッドを使用し、Iterator変数iに反復子を代入する
 ②hasNext()を使用し、次の要素がある場合(tureを返す場合)for文処理を続ける

  • while文を使用した場合
 Iterator i = c.iterator();
 while(i.hasNext()){

 }
 ①iteratorメソッドを使用し、Iterator変数iに反復子を代入する
 ②hasNextメソッドを使用し、次の要素がある間(trueを返す間)while文を続ける

タグ:

+ タグ編集
  • タグ:
最終更新:2009年12月25日 17:41
添付ファイル