TOP > Java > コレクション |
コレクション
他のオブジェクトを格納するためのオブジェクト。コンテナと呼ばれることもある。具体的には、HashMapやArrayListなどがある。
コレクションでできる操作
コレクションの基本タイプ
コレクションフレームワーク
インタフェース、実装、アルゴリズムの3つの要素で構成されているフレームワーク。セット(要素の重複を認めない)、リスト(インデックス位置でアクセス可能)、マップ(一意の識別子で可能)の三種類がある。
コレクションフレームワークの主要なインタフェースとクラス
java.util内パッケージ内のインターフェース
主な実装クラス
実装クラスは、「ソートも順序もなし」「順序付きでソートなし」「順序付きでソート済み」の3種類がある。また、コレクションで「反復処理」と言うのは、「先頭の要素から順に各要素を見ていくこと。但し、「先頭」という概念がない場合もある。
インタフェース List
順序付けられたコレクションです。「シーケンス」とも呼ばれます。このインタフェースのユーザは、リスト内のどこに各要素が挿入されるかを精密に制御できます。ユーザは整数値のインデックス (リスト内の位置) によって要素にアクセスしたり、リスト内の要素を検索したりすることができます。セットとは異なり、通常、リストは重複する要素を許可します。つまり、リストは、通常 e1.equals(e2) となるような、e1 と e2 の要素のペアを許可します。また、null 要素を許可する場合には、通常は複数の null 要素を許可します。ユーザが重複する値を挿入しようとしたときに実行時の例外をスローすることにより、重複する値を禁止するリストを実装する場合もありますが、このように使われることはほとんどありません。
ArrayListクラス
List インタフェースのサイズ変更可能な配列の実装です。リストの任意のオペレーションをすべて実装し、null を含むすべての要素を許容します。このクラスは、List インタフェースを実装するほか、リストを格納するために内部的に使われる配列のサイズを操作するメソッドを提供します。この実装は同期化されない点に注意してください。
ArrayListの例
import java.util.* ; public class Test{ public static void main(String[] args){ ArrayList arrayList = new ArrayList() ; arrayList.add("abc") ; arrayList.add("ghi") ; arrayList.add("jkl") ; arrayList.add(1, "def") ; Iterator it = arrayList.iterator() ; while (it.hasNext()) { System.out.println(it.next()) ; } } } Vectorクラス
オブジェクトの可変長配列を実装します。ここには配列と同じように、整数インデックスを使ってアクセスできる要素が格納されています。しかし、Vector のサイズは、作成後に追加および削除されたオブジェクトを格納できるように必要に応じて増やしたり減らしたりすることができます。 Vector は同期をとります。
Vectorクラスの例
import java.util.* ; public class Test{ public static void main(String[] args){ Vector vector = new Vector() ; vector.add("abc") ; vector.add("ghi") ; vector.add("jkl") ; vector.add(1, "def") ; vector.set(2, "JKL") ; System.out.println(vector.elementAt(1)) ; System.out.println(vector.elementAt(2)) ; } } LinkedListクラス
List インタフェースのリンクリストの実装です。リストの任意のオペレーションをすべて実装し、null を含め、すべての要素を許可します。List インタフェースを実装するほかに、LinkedList クラスは、リストの先端および終端にある要素を取得および削除したり、先端および終端に要素を挿入したりするメソッド (get、remove、insert) を提供します。これらのオペレーションを使うと、リンクリストをスタック、キュー、または双方向キュー (デキュー) として使用できるようになります。 この実装は同期化されません。
LinkedListクラスの例
import java.util.* ; public class Test{ public static void main(String[] args){ LinkedList li = new LinkedList() ; li.add("abc") ; li.add("ghi") ; li.add("jkl") ; li.add(1,"def") ; li.remove(0) ; Iterator it = li.iterator() ; while (it.hasNext()) { System.out.println(it.next()) ; } } } インタフェース Set
重複要素のないコレクションです。すなわち、セットは、e1.equals(e2) である e1 と e2 の要素ペアは持たず、null 要素を最大 1 つしか持ちません。その名前が示すように、このインタフェースは、数学で言う集合の抽象化をモデル化します。 コンストラクタについての追加規定として、すべてのコンストラクタは、重複要素のないセットを作成しなければなりません 。
HashSetクラス
このクラスは、ハッシュテーブル (実際には HashMap のインスタンス) を基にし、Set インタフェースを実装します。このクラスでは、セットの繰り返し順序について保証しません。特に、その順序を一定に保つことを保証しません。このクラスは、null 要素を許容します。この実装は同期化されません。
HashSetクラスの例
import java.util.* ; public class Test{ public static void main(String[] args){ HashSet ha = new HashSet() ; ha.add("z") ; ha.add("jkl") ; ha.add(null) ; ha.add(null) ; Iterator it = ha.iterator() ; while (it.hasNext()) { System.out.println(it.next()) ; } } } LinkedHashSetクラス
予測可能な繰り返し順序を持つ Set インタフェースのハッシュテーブルとリンクリストの実装です。この実装は、すべての実装のエントリを経る二重のリンクリストを保持するという点で、HashSet とは異なります。リンクリストは、繰り返し順序を定義します。この順序は、要素がセットに挿入された順序です (挿入順) 。要素をセットに「再挿入」する場合、挿入順は影響を受けません。呼び出しの直前に、s.contains(e) が true を返すときに s.add(e) が呼び出された場合、要素 e がセット s に再挿入されます。 この実装は同期化されません。
LinkedHashSetクラスの例
import java.util.* ; public class Test{ public static void main(String[] args){ LinkedHashSet li = new LinkedHashSet() ; li.add("z") ; li.add("jkl") ; li.add(null) ; li.add(null) ; Iterator it = li.iterator() ; while (it.hasNext()) { System.out.println(it.next()) ; } } } TreeSetクラス
このクラスは、TreeMap のインスタンスに基づく Set インタフェースを実装します。このクラスでは、ソートセットが確実に要素の昇順でソートされます。ただし、ソート方法は、使用されるコンストラクタにより異なり、要素の「自然順序付け」(Comparable を参照) によりソートされる場合と、セット作成時に提供されるコンパレータによりソートされる場合があります。この実装は同期化されません。
TreeSetクラスの例
import java.util.* ; public class Test{ public static void main(String[] args){ TreeSet tr = new TreeSet() ; tr.add("jkl") ; tr.add("abc") ; tr.add("ghi") ; Iterator it = tr.iterator() ; while (it.hasNext()) { System.out.println(it.next()) ; } } } インタフェース Map
キーを値にマッピングするオブジェクトです。マップには、同一のキーを複数登録することはできません。各キーは 1 つの値にしかマッピングできません。
HashMapクラス
Map インタフェースのハッシュテーブルに基づく実装です。この実装は、マップに関連するオプションのオペレーションをすべてサポートし、null 値および null キーを使用できます。この実装は同期化されません。
HashMapクラスの例
import java.util.*; class MapEcho { public void get(HashMap map) { Iterator it = map.keySet().iterator(); Object id; while (it.hasNext()) { id = it.next(); System.out.println(id + " = " + map.get(id)); } } } class Test { public static void main(String[] args) { HashMap user = new HashMap(); int[] serial = {1,2,3}; String[] name = {"Yamada","Tanaka","Sato"}; for (int i = 0; i < 3; i++) { user.put(new Integer(serial[i]), name[i]); } MapEcho ma = new MapEcho(); ma.get(user); } } Hashtableクラス
このクラスは、ハッシュテーブルを実装するためのもので、キーを値にマップします。null オブジェクト以外であれば、どのオブジェクトでもキーや値に使用することができます。Hashtable は同期をとります。
Hashtableクラスの例
import java.util.*; class HashTableEcho { public void get(Hashtable map) { Iterator it = map.keySet().iterator(); Object id; while (it.hasNext()) { id = it.next(); System.out.println(id + " = " + map.get(id)); } } } class Test { public static void main(String[] args) { Hashtable user = new Hashtable(); int[] serial = {1,2,3,4}; String[] name = {"Yamada","Tanaka","oyama","Sato"}; for (int i = 0; i < 4; i++) { user.put(new Integer(serial[i]), name[i]); } HashTableEcho ma = new HashTableEcho(); ma.get(user); } } LinkedHashMapクラス
予測可能な繰り返し順序を持つ Map インタフェースのハッシュテーブルとリンクリストの実装です。この実装は、すべての実装のエントリを経る二重のリンクリストを保持するという点で、HashMap とは異なります。リンクリストは、繰り返し順序を定義します。この順序は、通常キーがマップに挿入された順序です (挿入順) 。キーをマップに「再挿入」する場合、挿入順は影響を受けません。この実装は同期化されません。
LinkedHashMapクラスの例
import java.util.*; class TestLinkedHashMap { public void get(LinkedHashMap map) { Iterator it = map.keySet().iterator(); Object id; while (it.hasNext()) { id = it.next(); System.out.println(id + " = " + map.get(id)); } } } class Test { public static void main(String[] args) { LinkedHashMap user = new LinkedHashMap(); int[] serial = {1,2,3,4}; String[] name = {"Yamada","Tanaka","oyama","Sato"}; for (int i = 0; i < 4; i++) { user.put(new Integer(serial[i]), name[i]); } TestLinkedHashMap ma = new TestLinkedHashMap(); ma.get(user); } } LinkedHashMapクラス
SortedMap インタフェースの実装に基づく Red-Black ツリーです。このクラスでは、マップが確実にキーの昇順でソートされます。ただし、ソート方法はコンストラクタにより異なり、キーのクラスの「自然順序付け」(Comparable を参照) によりソートされる場合と、作成時に提供されるコンパレータによってソートされる場合があります。 この実装は同期化されません。
LinkedHashMapクラスの例
import java.util.*; class TestTreeMap { public void get(TreeMap map) { Iterator it = map.keySet().iterator(); Object id; while (it.hasNext()) { id = it.next(); System.out.println(id + " = " + map.get(id)); } } } class Test { public static void main(String[] args) { TreeMap user = new TreeMap(); int[] serial = {3,1,2,4}; String[] name = {"Yamada","Tanaka","oyama","Sato"}; for (int i = 0; i < 4; i++) { user.put(new Integer(serial[i]), name[i]); } TestTreeMap ma = new TestTreeMap(); ma.get(user); } } 各クラスのまとめ
|
Copyright 2007 ためになるホームページ All Rights Reserved. |