TreeMap實現了SortedMap接口, 根據鍵自然排序, 要求鍵必須是可比較的,要么指定Comparator比較器,如果沒有Comparator比較器, 鍵要實現Comparable接口。
package com.wkcto.chapter05.map;
import java.util.Comparator;
import java.util.TreeMap;
/**
* TreeMap
* @author 蛙課網
*
*/
public class Test09 {
public static void main(String[] args) {
//1)創建TreeMap, 在構造方法中指定Comparator比較器
TreeMap<String, Integer> treeMap = new TreeMap<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1); //按字符串降序
}
});
treeMap.put("feifei", 28);
treeMap.put("zhang", 36);
treeMap.put("yong", 35);
treeMap.put("bin", 34);
//輸出結果, 根據鍵降序排序
System.out.println( treeMap );
//{zhang=36, yong=35, feifei=28, bin=34}
//2) 創建TreeMap, 沒有指定Comparator比較器, 要求鍵實現Comparable接口
TreeMap<String, Integer> treeMap22 = new TreeMap<>();
treeMap22.putAll(treeMap);
System.out.println( treeMap22 );
//{bin=34, feifei=28, yong=35, zhang=36}
}
}
package com.wkcto.chapter05.map;
import java.util.Comparator;
import java.util.TreeMap;
/**
* TreeMap中的鍵必須是可比較的
* 要么指定Comparator比較器,要么實現Comparable接口
* 注意:
* 在TreeMap中判斷鍵是否存在,根據Comparator/Comparable的比較結果是否為0進行判斷的,如果為0就認為是相同的鍵
*
* @author 蛙課網
*
*/
public class Test10 {
public static void main(String[] args) {
//創建TreeMap, 存儲<Person, String> 表示員工與部門
//指定Comparator比較器 , 根據年齡升序
TreeMap<Person, String> treeMap = new TreeMap<>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.age - o2.age;
}
});
treeMap.put(new Person("feifei", 28), "教學部");
treeMap.put(new Person("xixi", 22), "教務部");
treeMap.put(new Person("hong", 26), "市場部");
treeMap.put(new Person("yun", 24), "市場部");
System.out.println( treeMap );
//{ [name=xixi, age=22]=教務部, [name=yun, age=24]=市場部, [name=hong, age=26]=市場部, [name=feifei, age=28]=教學部}
//因為Comparator比較器根據年齡比較大小, 新添加的Person鍵如果與Map中現在的鍵年齡相同 就認為是同一個鍵
treeMap.put(new Person("mengmeng", 22), "行政");
System.out.println( treeMap );
//binbin的年齡與feifei年齡相同, 就認為是同一個鍵
System.out.println( treeMap.containsKey(new Person("binbin", 28))); //true
System.out.println("--------------------------------");
TreeMap<Person, String> treeMap2 = new TreeMap<>(treeMap);
System.out.println( treeMap2 );
TreeMap<Person, String> treeMap3 = new TreeMap<>();
treeMap3.putAll(treeMap);
System.out.println( treeMap3 );
//{ [name=feifei, age=28]=教學部, [name=hong, age=26]=市場部, [name=xixi, age=22]=教務部, [name=yun, age=24]=市場部}
}
}
TreeMap可以根據鍵自然排序,排序的原理是二叉樹原理