为什么要使用基于红黑树的Java TreeMap实现?

时间:2013-02-17 16:40:52

标签: java algorithm binary-search-tree avl-tree red-black-tree

wikipedia's article on AVL trees的第三段说:“由于AVL树更加严格平衡,因此对于查找密集型应用程序来说,它们比红黑树更快。”

所以,不应该使用AVL树而不是红黑树来实现TreeMap(因为基于哈希的数据结构会有更多的查找密集型应用程序)?

3 个答案:

答案 0 :(得分:22)

红黑树更为通用。它们在添加,删除和查找方面表现相对较好,但AVL树的查找速度更快,代价是添加/删除速度较慢。 Java的一般政策是提供最佳的通用数据结构。这也是Java默认的Array.sort(Object [] a)实现稳定,自适应,迭代合并排序而不是快速排序的原因。

答案 1 :(得分:2)

历史上,旋转次数被认为是非常重要的,所以选择了红黑色的树而不是AVL,因为红黑色的旋转随着随机插入而略微减少 - 每次插入的平均旋转为.6对.7。

事后看来,AVL树可能是更好的选择。你可以看到AVL和AV的性能比较。 Java中的红黑树在这里: https://refactoringlightly.wordpress.com/2017/10/29/performance-of-avl-red-black-trees-in-java/

随机插入的性能类似。使用顺序数据,AVL树的表现要好得多 - 30%或更多。

答案 2 :(得分:1)

维基百科的文章是错误的(至少,没有支持引用来支持索赔)。确实,AVL树的最坏情况高度(1.44 lg n)优于红黑BST(2 lg n)的最坏情况高度,但这是最坏的情况,可能没什么关系与现实世界的表现。