為什么HashMap使用紅黑樹而不使用AVL樹


為什么HashMap使用紅黑樹而不使用AVL樹?

紅黑樹適用於大量插入和刪除;因為它是非嚴格的平衡樹;只要從根節點到葉子節點的最長路徑不超過最短路徑的2倍,就不用進行平衡調節

AVL 樹是嚴格的平衡樹,上述的最短路徑與最長路徑的差不能超過 1,AVL 允許的差值小;在進行大量插入和刪除操作時,會頻繁地進行平衡調整,嚴重降低效率;

紅黑樹雖然不是嚴格的平衡樹,但是其依舊是平衡樹;查找效率是 O(logn)

AVL也是 O(logn)

紅黑樹舍去了嚴格的平衡,使其插入,刪除,查找的效率穩定在 O(logn)

反觀 AVL 樹,查找沒問題 O(logn),但是為了保證高度平衡,動態插入和刪除的代價也隨之增加,綜合效率肯定達不到 O(logn)

所以在進行大量插入,刪除操作時,紅黑樹更優一些

HashMap 用到數據結構有(JDK 1.8):數組,鏈表,紅黑樹

在沒有地址沖突時,效率 O(1)

有少量地址沖突,在沖突的地址拉鏈(建鏈表),效率在 O(1) ~ O(logn) 之間

有大量地址沖突,在沖突的地址建紅黑樹,效率 O(logn)


免責聲明!

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



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