TreeMap源码分析
java.util.TreeMap
类继承了 java.util.AbstractMap
抽象类,实现了 java.util.NavigableMap
、java.lang.Cloneable
、java.io.Serializable
接口。
一、TreeMap特点或规范
TreeMap
是基于 红黑树 的 NavigableMap 实现。根据其 key 的 自然顺序 进行排序,或者根据使用的构造器在 Map 创建时提供的比较器进行排序。
由于底层采用了红黑树的数据结构,因此 TreeMap 的查询方法,如:**containsKey()
,get()
,put()
,remove()
,其时间复杂度均为:O(logn)**。
注意:TreeMap 不同步。
如果多个线程同时访问,并且至少有一个线程进行了结构上的修改,则必须在外部进行同步;如下:
SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
注意:此类中的方法返回的所有 Map.Entry
都它们不支持 Entry.setValue()
方法;可以使用 put(K, V)
方法更改 Entry 中的值。
二、成员变量
2.1 常量
1 |
|
2.2 变量
1 |
|
三、构造器
3.1 遵循Map接口的构造器规范
1 |
|
3.2 遵循SortedMap接口的构造器规范
1 |
|
四、方法分析
TreeMap 中的方法分为以下几类。
4.1 实现自Map接口的方法
4.2 实现自SortedMap接口的方法
4.3 实现自NavigableMap接口的方法
4.4 继承自AbstractMap接口的方法
4.5 TreeMap自身方法
TreeMap 中的大部分方法与 HashMap.TreeNode 内部类相似,都使用了 红黑树 结构,变色、左旋、右旋 等基本操作也十分相似。
TreeMap源码分析
https://cuilan.github.io/2019/09/17/java/util/TreeMap-source-analysis/