面試題:為什么用紅黑樹不用普通的AVL樹


在Jdk1.8版本后,Java對HashMap做了改進,在鏈表長度大於8的時候,將后面的數據由鏈表改為了存在紅黑樹中,以加快檢索速度。

有疑問為什么是使用紅黑樹而不是AVL樹,AVL樹是完全平衡二叉樹阿?

最主要的一點是:

在CurrentHashMap中是加鎖了的,實際上是讀寫鎖,如果寫沖突就會等待,如果插入時間過長必然等待時間更長,而紅黑樹相對AVL樹他的插入更快!

問題:為什么不使用AVL樹而使用紅黑樹?

紅黑樹和AVL樹都是最常用的平衡二叉搜索樹,它們的查找、刪除、修改都是O(lgn) time

AVL樹和紅黑樹有幾點比較和區別:
(1)AVL樹是更加嚴格的平衡,因此可以提供更快的查找速度,一般讀取查找密集型任務,適用AVL樹。
(2)紅黑樹更適合於插入修改密集型任務。
(3)通常,AVL樹的旋轉比紅黑樹的旋轉更加難以平衡和調試。

總結
(1)AVL以及紅黑樹是高度平衡的樹數據結構。它們非常相似,真正的區別在於在任何添加/刪除操作時完成的旋轉操作次數。
(2)兩種實現都縮放為a O(lg N),其中N是葉子的數量,但實際上AVL樹在查找密集型任務上更快:利用更好的平衡,樹遍歷平均更短。另一方面,插入和刪除方面,AVL樹速度較慢:需要更高的旋轉次數才能在修改時正確地重新平衡數據結構。
(3)在AVL樹中,從根到任何葉子的最短路徑和最長路徑之間的差異最多為1。在紅黑樹中,差異可以是2倍。
(4)兩個都給O(log n)查找,但平衡AVL樹可能需要O(log n)旋轉,而紅黑樹將需要最多兩次旋轉使其達到平衡(盡管可能需要檢查O(log n)節點以確定旋轉的位置)。旋轉本身是O(1)操作,因為你只是移動指針。

轉載:https://zhangvalue.blog.csdn.net/article/details/101483736


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM