コレクション・ フレームワーク 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
© Copyright 2024 ExpyDoc