PowerPoint ファイル

コレクション・
フレームワーク
J2EE II
第2回 / 2005年9月29日
第3回 / 2005年10月6日
1
この講義のWebページ
www.wakhok.ac.jp/~tomoharu/j2ee2-wakkanai-2005/
2
きょうの講義内容






コレクション・フレームワークとコレクション
List
Set
Map
コレクションの繰り返し処理
代表的なアルゴリズムを使う
3
コレクション・フレームワーク
とコレクション
コレクション・フレームワークとコレクション
List
Set
Map
コレクションの繰り返し処理
代表的なアルゴリズムを使う
4
コレクション・フレームワーク

コレクション



オブジェクトをまとめたもの
コレクションを繰り返し処理する
代表的なアルゴリズムを使う

ソート、サーチなど
5
コレクション

オブジェクトを集めたもの





java.util.List
java.util.Set
java.util.Map
これらはいずれも「インタフェース」であり、
実装クラスが別にある。
単に配列を使ったりするよりも、便利な機
能が多い。
6
List
コレクション・フレームワークとコレクション
List
Set
Map
コレクションの繰り返し処理
代表的なアルゴリズムを使う
7
java.util.List (1)



オブジェクトが順番に並んだコレクション
java.util.List はインタフェース
実装クラスには



java.util.ArrayList
java.util.LinkedList
java.util.Vector
8
java.util.List (2)
// 生成
List<String> list = new ArrayList<String>();
// リストの末尾に追加
list.add(line);
// 0番目 (=先頭) の要素を取得
String str = list.get(0);
9
インタフェースの利用

普通ならこう書く。


ArrayList は List インタフェースを実装しているので、
こう書ける。


ArrayList<String> list = new ArrayList<String>();
List<String> list = new ArrayList<String>();
LinkedListもListを実装しているからこう書ける。

List<String> list = new LinkedList<String>();
public class ArrayList implements List {
……
}
10
Generics (1)


J2SE 5.0 から導入された機能
Listで管理するオブジェクトをString型に限定する


List<String> l = new ArrayList<String>();
ほかの型の場合


List<Book> l = new ArrayList<Book>();
List<Integer> l = new ArrayList<Integer>();
11
Generics (2)

J2SE 1.4 までの場合
List l = new ArrayList();
l.add("1000");
……
String str = (String)list.get(0);
キャストが必要になる
12
java.util.List (3)

リスト内での挿入や削除が頻繁に起こるなら、実装クラ
スには java.util.LinkedList を使う。



「ダブルリンクトリスト」というデータ構造が使われており、挿
入や削除が高速にできる。
List list = new LinkedList(); とするだけ。
ArrayList や LinkedList は同期化されていない。


同期化するには次のようにする。
List newList = Collections.synchronizedList(list);
13
同期化

1つのオブジェクトに、2つのスレッドがアクセスする場合





1つのスレッドからは、オブジェクトを削除するメソッド
別のスレッドからは、オブジェクトを取得するメソッド
矛盾が生じる
そこで、同時にはアクセスできないようにする。これが同
期化。
ただし、同期化させると遅くなる。
14
Set
コレクション・フレームワークとコレクション
List
Set
Map
コレクションの繰り返し処理
代表的なアルゴリズムを使う
15
java.util.Set (1)



オブジェクトの重複が
ないコレクション
数学の「集合」と同じ
実装クラスには


java.util.HashSet
HashSet は同期化され
ていない。
16
java.util.Set (2)
// 生成
Set<String> set = new HashSet<String>();
// 登録
set.add(“1000”);
// 指定したオブジェクトが含まれているかどうか
set.contains(“1000”);
17
Map
コレクション・フレームワークとコレクション
List
Set
Map
コレクションの繰り返し処理
代表的なアルゴリズムを使う
18
java.util.Map (1)



「キー」と「値」がペアになって
いるコレクション
キーの重複はない。
実装クラスには




java.util.HashMap
java.util.WeakHashMap
java.util.Hashtable
HashMap や WeakHashMap
は同期化されていない。
19
java.util.Map (2)
// 生成
Map<String, String> map =
new HashMap<String, String>();
// 登録 (“1000” がキー、“野口英世” が値)
map.put(“1000”, "野口英世”);
// キーから値を取得
String value = map.get(“1000”);
20
java.util.SortedSet と
java.util.SortedMap

java.util.SortedSet




内部でオブジェクトの順番を保持している Set
挿入や削除があっても順番を保持する
実装クラスは java.util.TreeSet
java.util.SortedMap



内部でキーの順番を保持している Map
挿入や削除があっても順番を保持する
実装クラスは java.util.TreeMap
21
コレクションの繰り返し処理
コレクション・フレームワークとコレクション
List
Set
Map
コレクションの繰り返し処理
代表的なアルゴリズムを使う
22
java.util.Iterator (1)

コレクションの中のオブジェクトをひとつひ
とつ処理していく
23
java.util.Iterator (2)
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String value = iterator.next();
System.out.println(value);
}
24
for文の拡張 (1)


J2SE 5.0 から登場した for 文の拡張
コレクションや配列に含まれる要素を繰り返
し処理する
for (要素の型 要素名: コレクション or 配列) {
……
}
25
for文の拡張 (2)
for (String value: list) {
System.out.println(value);
}
26
代表的なアルゴリズムを使う
コレクション・フレームワークとコレクション
List
Set
Map
コレクションの繰り返し処理
代表的なアルゴリズムを使う
27
java.util.Collections

コレクションの中でのソート(整列)、サーチ(探
索)、最大・最小など、代表的なアルゴリズム
をそのまま使える。


Collections.sort(list);
ソートの場合は、「自然な順序付け」で行う。
例えば、アルファベット順など。

順序付けは自分で定義することもできる。
28