為什么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)