【java】【05】HashMap

1.由數組、鏈表、紅黑樹組成

2.數組的查詢消息和寫效率非常高,因爲地址是連續的而且類型固定,只需要簡單計算就可以找到元素內存地址
但是想要擴容需要重新分配空間建新的數組

3.鏈表的插入刪除效率非常高,只需要修改指針指向就可以
但是查詢效率比較低,需要一個一個的遍歷比較

3.當鏈表長度到8的時候,會把鏈表變成紅黑樹

二叉排序樹:左子樹的值小於根節點,右子樹的值大於根節點
平衡二叉樹:左子樹的深度和右子樹的深度差不大於1的絕對值,可以通過左旋、右旋、先左旋再右旋、先右旋再左旋的方式維持平衡
紅黑樹:左子樹和右子樹的深度不能成二倍關係,比平衡二叉樹要求低點,不用老是維護平衡

4.HashMap
1.new一個Entry元素的數組,數組的長度必須是2的n次方,
2.因爲根據key計算數組index的時候用到了與運算提升效率,和2的n次方-1做與運算,2的n次方減一有個特點最後位都是1,這樣可以保證與的結果最大值時2的n次方-1
3.jdk1.8hashmap重現分配空間時使用和2的n次方與來計算index,和2的n次方與只有兩種結果,一個是0,一個是2的n次方
4.當鏈表的長度是8的時候變成紅黑樹爲什麼,因爲長度爲8的鏈表平均查詢是2分值n就是4,黑紅樹的平均比較是log(n)就是3,當長度是6的時候還需要變成鏈表
5.jdk1.7多線程做HashMap擴容時,併發大時會導致鏈表循環指向的問題,jdk1.8修改了這個問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章