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可以根据键自然排序,排序的原理是二叉树原理