日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java hashmap 添加_JAVA—HashMap

發布時間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java hashmap 添加_JAVA—HashMap 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一些關于hashmap的學習筆記

1.HashMap底層實現原理

在JDK1.7中HashMap是以數組加鏈表的形式組成的,在JDK1.8之后新增了紅黑樹的組成結構,當鏈表大于8并且容量大于64時,鏈表結構會轉變成紅黑樹結構。

數組中的元素稱為哈希桶,每個哈希桶有四個字段,hash、key、value以及表示下一個節點的next。

2.JDK1.8對HashMap的優化

(1)添加了紅黑樹,因為鏈表過長會影響HashMap的性能,降低效率,而紅黑樹具有快速增刪改查的特點,可以有效提高效率問題。

(2)死循環優化,鏈表插入方式改為尾部正序插入

(3)優化擴容,JDK1.8在擴容的時候選擇通過高位運算e.hash&olcCap來確定元素是否需要移動,而不是重新計算哈希值。

比如:

key1.hash=10 0000 1010

oldCap=16 0001 0000

高一位結果為0,0表示元素在擴容時位置不會發生變化

key2.hash=10 0001 0001

oldCap=16 0001 0000

這時候高一位為1,1表示元素在擴容時發生了位置變化,新的下標位置等于原下標位置+原數組長度

3.HashMap死循環

JDK1.7之前死循環造成的主要原因是HashMap并不是線程安全的并且在JDK1.8之前的插入方式為首部倒序插入。假設一個HashMap的默認大小為2,原本里面有個key(5),現創建兩個線程,t1向HashMap中添加元素key(3),t2添加元素key(7),t1在對next賦值后,t2得到cpu使用權,此時t1中e指向key(3),next指向key(7),之后t2重新rehash,鏈表順序被反轉,這時key(7)的next為key(3),之后查詢時久形成了循環調用,導致死循環。

總結

以上是生活随笔為你收集整理的java hashmap 添加_JAVA—HashMap的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。