キーの順番でデータを扱う事が可能なクラス
HashMap classでは、キーの値の順番でデータを扱う事が出来ないので、特定のキーの値を指定して、”これよりキー値が大きなデータ”
と言ったようなアルゴリズムでデータを扱う事が出来ません。
SortedMap interfaceを実装したTreeMapを使えば、データがキーの順番に扱う事が出来るため、上のようなリクエストに応える事が出来ます。
下のsampleでは顧客番号と顧客名をマッピングしたデータを作った後に、TreeMapからcustomerIDが20010901-0000以上の
customerを抽出し、列挙しています。
import java.util.*; class ExamTreeMap { public static void main(String[] args) { TreeMap tm = new TreeMap(); tm.put(new Long(200107310001L), "Bill"); tm.put(new Long(200112250033L), "Tobal"); tm.put(new Long(200109180654L), "Duke"); SortedMap sm = tm.tailMap(new Long(200109010000L)); Set sm_set = sm.keySet(); //get list of keyset Iterator it = sm_set.iterator(); while ( it.hasNext() ) { String cust_name = (String)tm.get(it.next()); System.out.println( cust_name); } } } |
実行結果
Duke
Tobal
とコンソールに表示されます。
TreeMap classとtailMap method
TreeMapクラスはHashMapクラスと同じく、キーも要素も参照型を扱い、基本型のデータは扱いません。
tailMapメソッドは引数に渡された値以上のキーを持つMapを抽出します。
tailMapメソッド以外にもfrom toでキー範囲を指定できるメソッドなどが用意されています。
Iterator
抽出されたデータを列挙するために、Iteratorを使っています。
Mapから直接にIteratorを取得できない為に、keySet()メソッドでキー値だけのSetを取り出しています。
SetはCollectionインターフェイスを実装しているので、iterator()メソッドでIteratorオブジェクトの入手が可能です。