TreeMap底层数据结构:TreeMap底层数据结构是红黑树;
红黑树特性:
- 每个节点都只能是红色或者黑色;
- 根节点是黑色;
- 每个叶节点(NLL节点,空节点)是黑色的;
- 如果一个节点是红色的,那么它的两个子节点都是黑的。也就是说在一条路径上不能出现相邻的两个红色节点;
- 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点;
特点:
- TreeMap是非线程安全的 :但是可以用如下如下方式设置为线程安全:
Map m=Collections.synchronizedSortedMap(new TreeMap()); 来实现线程安全;
-
TreeMap是用键进行排序的,默认采用升序排序;通过Comparable或Comparator来排序;
TreeMap是SortedMap接口基于红黑树的实现。此类保证了映射按照升序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序进行排序,或者按照创建时所提供的比较器(自定义)进行排序; -
允许值重复,不允许键重复;
-
键不可以为null(如果比较器对null做了处理,就可以为null),值可以为null;
TreeMap的应用:
- 自定义排序:
Map<Integer,Integer> map = new TreeMap<>();
map.put(1, null);
map.put(10, 1);
map.put(3, 2);
map.put(2, 3);
for(Map.Entry<Integer, Integer> entry:map.entrySet())
{
System.out.println(entry.getKey()+":"+entry.getValue());
}
//输出结果
// 1:null
// 2:3
// 3:2
// 10:1
- Comparable 排序:只要自定义类实现了Comparable接口,就可以实现排序;
public