类介绍
类定位
TreeMap
是AbstractMap
的子类,他实现了AbstractMap
中空出来的entrySet()
,put()
方法做了自己的实现,从而可以作为一个完整的基础类对外赋能。他在维护内部的数据时使用了红黑树,从而大大提升了插入、删除、搜索的效率。在缓存大量数据时有很好的作用。【但是貌似我们平时还是HashMap
用的多一点】
类继承关系分析
先上图:
SortedMap
在Map
的基础上新加了比较器,并增加了根据顺序获得某区间数据、获得头尾数据的功能
AbstractMap
在Map
的基础上对非核心方法进行了实现
NavigableMap
在SortedMap
的基础上对边缘取值和逆向遍历两个方面做了更加详细的定义
Serialable
,Cloneable
是java的基本的接口,他们分别表示可以序列化和反序列化/可以浅层复制
综上,TreeMap
是以红黑树算法为原理,实现了一个存储中有序排列的高效Map
。
注意事项
这个类反正我用的不多,把他当做一个红黑树的实现类好好看看吧。在前面我记录红黑树时已经详细介绍过TreeMap
的红黑树结构修改思路了。就不再赘述了。
源码介绍
这个情况有点特殊,情况如下:
- 和算法相关的,比较难理解的东西我在红黑树学习时介绍过了
- 和集合相关的,都是老套路,说着也没啥意思
所以,决定尝试新思路:不再做源码的堆砌,我们主要分析类的设计结构,对重要的地方集中介绍,不重要的一笔带过。这样分析是为了能对整个类的架构有一个了解。
架构如下,【我们忽略了和Spliterator
相关的方法,那个我们最后再说】
知识扩展
TreeMap
和HashMap
对比:
1、实现
TreeMap:SortMap接口,基于红黑树
HashMap:基于哈希散列表实现
2、存储
TreeMap:默认按键的升序排序
HashMap:随机存储
3、遍历
TreeMap:Iterator遍历是排序的
HashMap:Iterator遍历是随机的
4、性能损耗
TreeMap:插入、删除
HashMap:基本无
5、键值对
TreeMap:键、值都不能为null
HashMap:只允许键、值均为null
6、安全
TreeMap:非并发安全Map
HashMap:非并发安全Map
7、效率
TreeMap:低
HashMap:高