TreeMap
キーに順序を持ったマップ – TreeMapクラスTreeMapもまた、HashMap同様、要素をキーと値の組み合わせで管理するデータ構造ですが、キーの持ち方が異なります。HashMapではキーの順番を保証しないのに対して、TreeMapではキーを自動的にソートし、順序を保証します。キーの重複を許さない点は、HashMapと同じですし、利用できるメソッドも共通です。
CollTree.java
package com.example.mynavi.collection;
import java.util.Map;
import java.util.TreeMap;
public class CollTree {
public static void main(String[] args) {
Map<String, String> map = new TreeMap<String, String>() {
{
put("PC", "personal computer");
put("A/C", "air conditioner");
put("remote", "remote control");
}
};
for (String str : map.keySet()) {
System.out.println(str + ":" + map.get(str));
}
if (!map.isEmpty()) {
System.out.println("要素数は" + map.size() + "個です。");
}
}
}
A/C:air conditioner PC:personal computer remote:remote control → キーについてソート済み 要素数は3個です。
TreeMapでは、引数にComparatorを渡すことで、ソート規則を変更することもできます。
CollCompara.java
package com.example.mynavi.collection;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
public class CollCompara {
public static void main(String[] args) {
Map<String, String> m = new TreeMap<String, String>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.length() - o1.length();
}
});
m.put("PC", "personal computer");
m.put("A/C", "air conditioner");
m.put("remote", "remote control");
System.out.println(m);
// 結果:{remote=remote control, A/C=air conditioner, PC=personal computer}
}
}
Comparatorで実装すべきメソッドは、compareメソッドだけです。compareメソッドでは、引数o1、o2を比較し、以下のようなルールで戻り値を返すようにします。
・「o1 > o2」の場合は正の整数を返す
・「o1 < o2」の場合は負の整数を返す
・「o1 = o2」の場合はゼロを返す
TreeMapであれば、キー値を順にo1、o2に渡すことで、キーの大小を決定します。この例では、o2.lengthからo1.lengthを減算していますので、文字列長によって大小を決める、という意味になります。結果を見ると、確かに文字列長の長いものからキーが並べられていることが確認できます。






