版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
红黑树:
主要特征:
- 在每个节点上增加一个属性来表示节点的颜色,可以是红色,也可以是黑色。
- 红黑树与AVL树类似,都是在插入和删除元素时,通过特定的旋转保持自身平衡,从而获得较高查找性能。
约束条件:
- 节点只能是红色或者黑色
- 根节点必须是黑色
- 所有NIL节点都是黑色
- 一条路径上不能出现相邻的两个红色节点
- 在任何递归子树内,根节点到叶子节点的所有路径上包含的相同数目的黑色节点
总结:
- 有红必有黑,红红不相连。 上述五个约束条件保证了红黑树的新增、删除。查找的最坏时间复杂度为O(logn)。
- 如果一个树的左节点或右节点不存在,则均认为是黑色。
- 红黑树的任何旋转在3次之内均可完成。
TreeMap:
基于红黑树实现的
TreeMap是按照key的排序结果来组织内部结构的Map类集合,它改变了Map类散乱无须的现象,不同于HashMap, TreeMap并非一定要覆写hashcode和equals方法来达到Key去重的目的。。虽然
TreeMap没有ConcurrentHashMap和HashMap普及(插入和删除的效率没有两者高), 但在key有排序要求的场景下,用TreeMap可以事半功倍,在集合框架中 TreeMap与HashMap都继承与AbstractMap抽象类
TreeMap提供了平均和最坏复杂度均为O(logn)的增删改查操作,并且实现了NavigableMap接口,该集合最大的特点是Key的有序性。