hashmap中用红黑树不用其他树_为什么hashMap引入了红黑树而不是其他结构

1.为什么hashMap使用红黑树而不是其他结构?

在回答这个问题之前,我们先了解一下有关二叉树的基本内容。

①二叉排序树(又称二叉查找树):

1)若左子树不为空,则左子树上所有结点的值均小于根结点的值。

2)若右子树不为空,则右子树上所有结点的值均大于根节点的值。

3)左右子树也为二叉排序树。

②平衡二叉树(AVL树):是一种二叉查找树,当且仅当两个子树的高度差不超过1时,这个树是平衡二叉树。

③红黑树:是许多二叉查找树中的一种,它能保证在最坏的情况下,基本动态集合操作时间为O(lgn).

问题1:为什么不使用二叉排序树?

问题主要出现在二叉排序树在添加元素的时候极端情况下会出现线性结构。

举例说明:由于二叉排序树左子树所有节点的值均小于根节点的特点,如果我们添加的元素都比根节点小,会导致左子树线性增长,这样就失去了用树型结构替换链表的初衷,导致查询时间增长。所以这是不用二叉查找树的原因。

问题2:为什么不使用平衡二叉树呢?

①红黑树不追求"完全平衡",即不像AVL那样要求节点的 |balFact| <= 1,它只要求部分达到平衡,但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多。

就插入节点导致树失衡的情况,AVL和RB-Tree都是最多两次树旋转来实现复衡rebalan

你可能感兴趣的:(hashmap中用红黑树不用其他树_为什么hashMap引入了红黑树而不是其他结构)