2003年度 データベース論

コレクション・フレームワーク
データベース論
第7回
この講義に関するWebページ
http://www.wakhok.ac.jp/~tomoharu/db2003/
連絡事項


来週 (6/4) の講義は休講です。
第1回レポート課題の締切は 6/20 です。
Tomcat がうまく動かない場合



インストールは済ませましたか?
Zドライブにインストールしましたか?
メニューにTomcatの情報がない場合
–
–
プロファイルの情報が読み込まれていない場合がある。
inside.html  システム情報  「2F実習室でプロファ
イルが読込めない障害について」を参照のこと。
コレクション・フレームワーク

コレクション
–


オブジェクトをまとめたもの
コレクションを繰り返して処理する
代表的なアルゴリズムを使う
–
ソート、サーチなど
コレクション

オブジェクトを集めたもの
–
–
–


java.util.List
java.util.Set
java.util.Map
これらはいずれも「インタフェース」であり、実装ク
ラスが別にある。
単に配列を使ったりするよりも、便利な機能が多い。
java.util.List (1)


オブジェクトが順番に並んだコレクション
実装クラスには
–
–
–
java.util.ArrayList
java.util.LinkedList
java.util.Vector
java.util.List (2)
// 生成
List list = new ArrayList();
// リストの末尾に追加
list.add(line);
// 0番目 (=先頭) の要素を取得
String str = (String)list.get(0);
インタフェースの利用

普通ならこう書く。
–

ArrayList は List インタフェースを実装しているので、こう
書ける。
–

ArrayList list = new ArrayList();
List list = new ArrayList();
LinkedList も List を実装しているから、こう書ける。
–
List list = new LinkedList();
public class ArrayList implements List {
…..
}
java.util.List (3)

リスト内での挿入や削除が頻繁に起こるなら、実
装クラスには java.util.LinkedList を使う。
–
–

「ダブルリンクトリスト」というデータ構造が使われており、
挿入や削除が高速にできる。
List list = new LinkedList(); とするだけ。
ArrayList や LinkedList は同期化されていない。
–
–
同期化するには次のようにする。
List newList = Collections.synchronizedList(list);
同期化

1つのオブジェクトに、2つのスレッドがアクセスす
る場合
–
–
–


1つのスレッドからは、オブジェクトを削除するメソッド
別のスレッドからは、オブジェクトを取得するメソッド
矛盾が生じる
そこで、同時にはアクセスできないようにする。こ
れが同期化。
ただし、同期化させると遅くなる。
java.util.Set (1)



オブジェクトの重複が
ないコレクション
数学の「集合」と同じ
実装クラスには
–

java.util.HashSet
HashSet は同期化さ
れていない。
java.util.Set (2)
// 生成
Set set = new HashSet();
// 登録
set.add(“1000”);
// 指定したオブジェクトが含まれているかどうか
set.contains(“1000”);
java.util.Map (1)



「キー」と「値」がペアになって
いるコレクション
キーの重複はない。
実装クラスには
–
–
–

java.util.HashMap
java.util.WeakHashMap
java.util.Hashtable
HashMap や
WeakHashMap は同期化さ
れていない。
java.util.Map (2)
// 生成
Map map = new HashMap();
// 登録 (“1000” がキー、“夏目漱石” が値)
map.put(“1000”, “夏目漱石”);
// キーから値を取得
String value = (String)map.get(“1000”);
java.util.SortedSet と
java.util.SortedMap

java.util.SortedSet
–
–
–

内部でオブジェクトの順番を保持している Set
挿入や削除があっても順番を保持する
実装クラスは java.util.TreeSet
java.util.SortedMap
–
–
–
内部でキーの順番を保持している Map
挿入や削除があっても順番を保持する
実装クラスは java.util.TreeMap
java.util.Iterator (1)

コレクションの中のオブジェクトをひとつひとつ処理
していく。
java.util.Iterator (2)
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
String value = (String)iterator.next();
System.out.println(value);
}
java.util.Collections

コレクションの中でのソート(整列)、サーチ(探索)、
最大・最小など、代表的なアルゴリズムをそのまま
使える。
–


Collections.sort(list);
ソートの場合は、「自然な順序付け」で行う。例え
ば、アルファベット順など。
順序付けは自分で定義できる。