コレクション・フレームワーク データベース論 第7回
この講義に関するWebページ http://www.wakhok.ac.jp/~tomoharu/db2003/
連絡事項 来週 (6/4) の講義は休講です。 第1回レポート課題の締切は 6/20 です。
Tomcat がうまく動かない場合 インストールは済ませましたか? Zドライブにインストールしましたか? プロファイルの情報が読み込まれていない場合がある。 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(); ArrayList は List インタフェースを実装しているので、こう書ける。 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.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); ソートの場合は、「自然な順序付け」で行う。例えば、アルファベット順など。 順序付けは自分で定義できる。