Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

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を減算していますので、文字列長によって大小を決める、という意味になります。結果を見ると、確かに文字列長の長いものからキーが並べられていることが確認できます。

コレクションフレームワーク
コレクションフレームワーク
コレクションを初期化する
synchronizedList/synchronizedMap/synchronizedSetメソッド
ArrayListクラス
asListメソッド
toArrayメソッド
LinkedList
HashMap
TreeMap
NavigableMap
HashSet
ArrayDeque

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職