1 什么是TreeMap
引用:https://blog.csdn.net/sunyuhua_keyboard/article/details/78467361
TreeMap是一个有序的key-value集合,他是通过红黑树(Red-Black tree)实现,TreeMap的基本操作containsKey,get,put和remove的时间复杂度是log(n)。
TreeMap继承于AbstractMap,所以它是一个Map,即一个key-value集合。
TreeMap实现了navigableMap接口,意味着它支持一系列的导航方法,返回有序的key集合。
TreeMap的构造方法:默认构造函数,元素按照自然排序进行排列,或者构造方法中提供comparator自定义比较器。
2 TreeMap底层实现算法——红黑树
红黑树(Red Black Tree,简称R-B Tree) 是一种自平衡二叉查找树在实践中高效。
引用:https://blog.csdn.net/chenssy/article/details/26668941
红黑树特性:
任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。(节点大于左、小于右)
(1) 每个节点或者是黑色,或者是红色。
(2) 根节点是黑色。
(3) 每个叶子节点是黑色。 [注意:这里叶子节点,是指为空的叶子节点!]
(4) 如果一个节点是红色的,则它的子节点必须是黑色的。
(5) 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
红黑树的基本操作:
红黑树添加、删除和旋转。在对红黑树进行添加或删除后,会用到旋转方法。为什么呢?道理很简单,添加或删除红黑树中的节点之后,红黑树就发生了变化,可能不满足红黑树的5条性质,也就不再是一颗红黑树了,而是一颗普通的树。而通过旋转,可以使这颗树重新成为红黑树。简单点说,旋转的目的是让树保持红黑树的特性。
旋转包括两种:左旋 和 右旋。
转载视频讲解:
https://www.bilibili.com/video/av45909616?from=search&seid=2533552765419796045