JavaのTreeMapクラスの使い方のサンプルです。
| 確認環境 ・Java 8 |
目次
- TreeMapクラス
- Mapインターフェース
- キーと値を追加する(putメソッド)
- キーを指定して値を取得する(getメソッド)
- キーと値の集合を取得する(entrySetメソッド)
- キーの集合を取得する(keySetメソッド)
- 値の集合を取得する(valuesメソッド)
- 要素数を取得する(sizeメソッド)
- 指定のキーがあるかを返す(containsKeyメソッド)
- 指定の値があるかを返す(containsValueメソッド)
- 中身が空かを返す(isEmptyメソッド)
- キーを指定して削除する(removeメソッド)
- すべての要素を削除する(clearメソッド)
- メソッドの引数/戻り値がマップの場合
- 並び順を制御するサンプル
- 要素を順番に処理する(forEachメソッド)
TreeMapクラス
- 一意の「キー」と「値」の組み合わせを要素として持ちます。
- キーは任意の文字列を使うことができます。連想配列といえます。
→連想配列とは添字(キー)に文字列を使用できる配列です。 - キーの重複は許されません。
- デフォルトは、キーを自然順序で保持します。Comparatorインターフェースを使って順序のルールを変更することができます。(←HashMap、LinkedHashMapと違う点)
- スレッドセーフではありません。
- 以下はJava8 API仕様のTreeMapクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/TreeMap.html
Mapインターフェース
- TreeMapクラスはMapインターフェースを実装しています。
- TreeMapクラスをインスタンス化する時、TreeMapクラス独自のメソッドを使用しない限り、通常Mapインターフェイス型の変数に代入します。
- TreeMapクラスは、Mapインターフェースを実装しているので、Mapインターフェイスにあるメソッドを使用できます。
- 以下はJava8 API仕様のMapインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Map.html
キーと値を追加する(putメソッド)
キーと値を追加するサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color);//{a=赤, b=黄, c=青}
color.put("b", "オレンジ");
System.out.println(color);//{a=赤, b=オレンジ, c=青}
}
}
8行目は、TreeMapクラスをインスタンス化してMapインターフェイス型の変数に代入しています。
→ジェネリクス<>でオブジェクトの中身はString,Stringであると宣言しています。
10-12行目は、putメソッドで要素を追加しています。
15行目は、既にあるキーを指定しています。上書きされます。
キーを指定して値を取得する(getメソッド)
キーを指定して値を取得するサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color.get("a")); //赤
}
}
12行目は、getメソッドで要素の値を取得しています。
キーと値の集合を取得する(entrySetメソッド)
キーと値の集合を取得するサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color.entrySet());//[a=赤, b=黄, c=青]
for (Map.Entry<String, String> c1 : color.entrySet()) {
System.out.println(c1.getKey());// a b c
System.out.println(c1.getValue());// 赤 黄 青
}
}
}
12,14行目は、entrySetメソッドでキーと値の集合を取得しています。
15行目は、getKeyメソッドでキーを取得しています。
16行目は、getValueメソッドでキーを取得しています。
キーの集合を取得する(keySetメソッド)
キーの集合を取得するサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color.keySet());//[a, b, c]
for (String c1 : color.keySet()) {
System.out.println(c1);// a b c
}
}
}
12,14行目は、keySetメソッドでキーの集合を取得しています。
値の集合を取得する(valuesメソッド)
値の集合を取得するサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color.values());//[赤, 黄, 青]
for (String c1 : color.values()) {
System.out.println(c1);// 赤 黄 青
}
}
}
12,14行目は、valuesメソッドで値の集合を取得しています。
要素数を取得する(sizeメソッド)
要素数を取得するサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color.size());//3
}
}
12行目は、sizeメソッドで要素数を取得しています。
指定のキーがあるかを返す(containsKeyメソッド)
指定のキーがあるかを返すサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color.containsKey("b"));//true
}
}
12行目は、containsKeyメソッドで指定のキーがあるかを取得しています。
ある場合trueです。
指定の値があるかを返す(containsValueメソッド)
指定の値があるかを返すサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color.containsValue("黄"));//true
}
}
12行目は、containsValueメソッドで指定の値があるかを取得しています。
ある場合trueです。
中身が空かを返す(isEmptyメソッド)
中身が空かを返すサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color.isEmpty());//false
}
}
12行目は、isEmptyメソッドで中身が空か取得しています。
空の場合trueです。
キーを指定して削除する(removeメソッド)
キーを指定して削除するサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
color.remove("a");
System.out.println(color);//{b=黄, c=青}
}
}
12行目は、removeメソッドで指定の要素を削除しています。
すべての要素を削除する(clearメソッド)
すべての要素を削除するサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
color.clear();
System.out.println(color);//{}
}
}
12行目は、clearメソッドですべての要素を削除しています。
メソッドの引数/戻り値がマップの場合
メソッドの引数と戻り値がマップの場合のサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String, String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
Map<String, String> b = showResult(color);
}
private static Map<String, String> showResult(Map<String, String> c1) {
return c1;
}
}
12行目は、呼び出し元のメソッドです。引数(実引数)にマップを指定しています。戻り値もマップです。
15行目は、定義されたメソッドです。引数(仮引数)にマップがあります。戻り値もマップです。(以下の図を参照)

呼び出し元のメソッドの引数の変数名(color)と定義されたメソッドの引数の変数名(c1)は異なっていても使用できます。
並び順を制御するサンプル
TreeMapクラスで値をセットしたときの並び順を制御するサンプルです。
自然順序
自然順序のサンプルです。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,Integer> m1 = new TreeMap<>();
m1.put("caa", 1);
m1.put("aa", 1);
m1.put("b", 1);
System.out.println(m1); // {aa=1, b=1, caa=1}
Map<String,Integer> m2 = new TreeMap<>();
m2.put("う", 1);
m2.put("あ", 1);
m2.put("い", 1);
System.out.println(m2); // {あ=1, い=1, う=1}
Map<Integer,String> m3 = new TreeMap<>();
m3.put(2, "aa");
m3.put(3, "bb");
m3.put(1, "cc");
System.out.println(m3); // {1=cc, 2=aa, 3=bb}
}
}
14行目は、登録した順序ではなくキーの自然順序(アルファベット順)になっています。
21行目は、キーの並び順が「あいう」になっています。
28行目は、キーの並び順が「123」になっています。
順序のルールを変更する
順序のルールを変更して、キーの文字の降順にするサンプルです。
package test1;
import java.util.Comparator;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
//順序のルールを変更。キーの文字の降順にする。
Map<String, Integer> m = new TreeMap<>(new Comparator<String>() {
public int compare(String k1, String k2) {
return k2.compareTo(k1) ;
}
});
m.put("caa", 1);
m.put("aa", 1);
m.put("b", 1);
// キーの文字の降順で表示。c,b,aの並び順。
System.out.println(m); // {caa=1, b=1, aa=1}
}
}
11-15行目は匿名クラスです。
Java 匿名クラスのサンプル
11行目のComparatorはインターフェースです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Comparator.html
16-18行目で値を登録しています。
21行目の結果は、登録した順序ではなくキーの降順(アルファベットの降順)になっています。
上記コードの13行目のreturn k2.compareTo(k1) を
→return k1.compareTo(k2)にするとキーの文字の昇順になります。{aa=1, b=1, caa=1}
→return k1.length() - k2.length()にすると文字列の長さの昇順になります。{b=1, aa=1, caa=1}
→return k2.length() - k1.length()にすると文字列の長さの降順になります。{caa=1, aa=1, b=1}
要素を順番に処理する(forEachメソッド)
要素を順番に処理するサンプルです。forEachメソッドは、Java8で導入されました。
package test1;
import java.util.TreeMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String,String> color = new TreeMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
color.forEach((a,b) -> System.out.println(a+b));//a赤 b黄 c青
}
}
13行目は、forEachメソッドでマップの各値を取得しています。変数a以降はラムダ式です。
Java ラムダ式のサンプル
以下は、Java8 API仕様のTreeMapクラスのforEachメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/TreeMap.html#forEach-java.util.function.BiConsumer-
関連の記事
Java ArrayListの使い方のサンプル
Java LinkedListの使い方のサンプル
Java HashMapの使い方のサンプル
Java LinkedHashMapの使い方のサンプル
Java HashSetの使い方のサンプル
Java 拡張for文のサンプル
Java リストから配列を作成するサンプル(ArrayList)
Java 配列からリストを作成するサンプル(Arraysクラス)
Java 配列からリストを作成するサンプル(Collectionsクラス)