TreeMap
日本語 | 木地図 |
英語 | tree map |
ふりがな | つりーまっぷ |
フリガナ | ツリーマップ |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.util.TreeMap。
キー追加時に「キーの昇順でソート」した状態で格納するMapインターフェイス実装クラス。
Mapインターフェイスの実装クラス。
基本的にはHashMapクラスと同じ機能を持つ。
HashMapクラスとの違いは、追加時に「キーでソート」する点である。
HashMapクラスは、追加時にキーのハッシュコードでグループ分けを行う。
対して、TreeMapクラスは中に「木構造」を持ち、追加時にキーの昇順でソートして木構造に追加する。つまり、内部の木構造は「キーの順番」で並べられているということになる。
get()メソッド等によりキーの検索を行う際には、この並べられているキーを順番にチェックするため、「並び順」の先頭側は早く取得できるが、後ろ側は時間が掛かることになる。
そのため、ハッシュコードでグループ分けをしているHashMapクラスに比べて検索に時間が掛かる傾向にある。
TreeMapクラスは、keySet()メソッド等で「キー一覧」を取得した場合に、ソートされた順番で取得することができる。
この「キー一覧がソートされた形で取得できる」ことこそがTreeMapクラスのメリットと言えるだろう。処理速度は特に気にせず、本当の意味での「辞書」が必要な場合にはTreeMapクラスが有効だろう。
ソート時の「要素の比較」は、Arraysクラスのsort()メソッド同様Comparableインターフェイスを使用するため、キーはComparableインターフェイスの実装クラスである必要がある。
キーのクラスがComparableインターフェイスの実装クラスではない場合、もしくは「降順」等特別なソートを行いたい場合には、TreeMapクラスのコンストラクタにComparatorインターフェイスの実装クラスを渡す。
キー追加時に「キーの昇順でソート」した状態で格納するMapインターフェイス実装クラス。
Mapインターフェイスの実装クラス。
基本的にはHashMapクラスと同じ機能を持つ。
HashMapクラスとの違いは、追加時に「キーでソート」する点である。
HashMapクラスは、追加時にキーのハッシュコードでグループ分けを行う。
対して、TreeMapクラスは中に「木構造」を持ち、追加時にキーの昇順でソートして木構造に追加する。つまり、内部の木構造は「キーの順番」で並べられているということになる。
get()メソッド等によりキーの検索を行う際には、この並べられているキーを順番にチェックするため、「並び順」の先頭側は早く取得できるが、後ろ側は時間が掛かることになる。
そのため、ハッシュコードでグループ分けをしているHashMapクラスに比べて検索に時間が掛かる傾向にある。
TreeMapクラスは、keySet()メソッド等で「キー一覧」を取得した場合に、ソートされた順番で取得することができる。
この「キー一覧がソートされた形で取得できる」ことこそがTreeMapクラスのメリットと言えるだろう。処理速度は特に気にせず、本当の意味での「辞書」が必要な場合にはTreeMapクラスが有効だろう。
ソート時の「要素の比較」は、Arraysクラスのsort()メソッド同様Comparableインターフェイスを使用するため、キーはComparableインターフェイスの実装クラスである必要がある。
キーのクラスがComparableインターフェイスの実装クラスではない場合、もしくは「降順」等特別なソートを行いたい場合には、TreeMapクラスのコンストラクタにComparatorインターフェイスの実装クラスを渡す。
参考サイト
// Sample.java
import java.util.TreeMap;
import java.util.Set;
import java.util.HashMap;
import java.util.Iterator;
public class Sample
{
public static void main( String[] args )
{
// TreeMapを作成します。
TreeMap treeMap = new TreeMap();
// 要素を追加します。
treeMap.put( "BBB", new Integer( 0 ) );
treeMap.put( "AAA", new Integer( 1 ) );
treeMap.put( "CCC", new Integer( 2 ) );
Set set = treeMap.keySet();
// 全部出力します。
for( Iterator iter = set.iterator(); iter.hasNext(); )
{
String string = (String)iter.next();
System.out.println( string );
}
// AAA
// BBB
// CCC
// このように、ちゃんと並んでいます。
// ちなみにHashMapクラスを使用する場合。
// HashMapを使用します。
HashMap hashMap = new HashMap();
// 要素を追加します。
hashMap.put( "BBB", new Integer( 0 ) );
hashMap.put( "AAA", new Integer( 1 ) );
hashMap.put( "CCC", new Integer( 2 ) );
set = hashMap.keySet();
// 全部出力します。
for( Iterator iter = set.iterator(); iter.hasNext(); )
{
String string = (String)iter.next();
System.out.println( string );
}
// CCC
// AAA
// BBB
// このように、HashMapクラスの場合には並んでいません。
}
}
import java.util.TreeMap;
import java.util.Set;
import java.util.HashMap;
import java.util.Iterator;
public class Sample
{
public static void main( String[] args )
{
// TreeMapを作成します。
TreeMap treeMap = new TreeMap();
// 要素を追加します。
treeMap.put( "BBB", new Integer( 0 ) );
treeMap.put( "AAA", new Integer( 1 ) );
treeMap.put( "CCC", new Integer( 2 ) );
Set set = treeMap.keySet();
// 全部出力します。
for( Iterator iter = set.iterator(); iter.hasNext(); )
{
String string = (String)iter.next();
System.out.println( string );
}
// AAA
// BBB
// CCC
// このように、ちゃんと並んでいます。
// ちなみにHashMapクラスを使用する場合。
// HashMapを使用します。
HashMap hashMap = new HashMap();
// 要素を追加します。
hashMap.put( "BBB", new Integer( 0 ) );
hashMap.put( "AAA", new Integer( 1 ) );
hashMap.put( "CCC", new Integer( 2 ) );
set = hashMap.keySet();
// 全部出力します。
for( Iterator iter = set.iterator(); iter.hasNext(); )
{
String string = (String)iter.next();
System.out.println( string );
}
// CCC
// AAA
// BBB
// このように、HashMapクラスの場合には並んでいません。
}
}
// Sample.java import java.util.TreeMap; import java.util.Set; import java.util.HashMap; import java.util.Iterator; public class Sample { public static void main( String[] args ) { // TreeMapを作成します。 TreeMap treeMap = new TreeMap(); // 要素を追加します。 treeMap.put( "BBB", new Integer( 0 ) ); treeMap.put( "AAA", new Integer( 1 ) ); treeMap.put( "CCC", new Integer( 2 ) ); Set set = treeMap.keySet(); // 全部出力します。 for( Iterator iter = set.iterator(); iter.hasNext(); ) { String string = (String)iter.next(); System.out.println( string ); } // AAA // BBB // CCC // このように、ちゃんと並んでいます。 // ちなみにHashMapクラスを使用する場合。 // HashMapを使用します。 HashMap hashMap = new HashMap(); // 要素を追加します。 hashMap.put( "BBB", new Integer( 0 ) ); hashMap.put( "AAA", new Integer( 1 ) ); hashMap.put( "CCC", new Integer( 2 ) ); set = hashMap.keySet(); // 全部出力します。 for( Iterator iter = set.iterator(); iter.hasNext(); ) { String string = (String)iter.next(); System.out.println( string ); } // CCC // AAA // BBB // このように、HashMapクラスの場合には並んでいません。 } }