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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

请你解释一下HashMap具体如何实现的?

發布時間:2025/1/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 请你解释一下HashMap具体如何实现的? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

請你解釋一下HashMap具體如何實現的?

HashMap是基于數組+鏈表實現的,通過對key的hashcode & 數組的長度=得到在數組中的位置,如果當前數組有元素,則將數組的當前元素的next指向要插入的新元素,這樣用于解決哈希沖突,形成了拉鏈式的結構。

put時在多線程的情況下,會形成環從而導致死循環。

數組長度一般是2n,從0開始編號,所以hashcode & (2n-1),(2n-1)每一位都是1,這樣會讓散列均勻。需要注意的是,HashMap在JDK1.8時引入了紅黑樹結構進行優化,當鏈表元素個數>=8時,鏈表將轉化為樹結構;若桶中鏈表元素個數<=6時,樹結構還原成鏈表。因為紅黑樹的平均查找時間復雜度是lgN,長度為8的時候,平均查找長度為3,如果繼續使用鏈表,平均查找長度為8/2=4,這才有轉換為樹的必要。鏈表長度如果<=6,6/2=3,雖然速度也很快,但是轉換為樹結構和生成樹的時間并不會太短。還有選擇6和8,中間有個差值7可以有效防止鏈表和樹頻繁轉換。假設一下,如果設計成鏈表元素個數超過8則鏈表轉換為樹結構,鏈表元素個數小于8則樹結構轉換成鏈表,如果一個HashMap不停的插入、刪除元素,鏈表個數在8左右徘徊,就會頻繁地發生鏈表轉樹,樹轉鏈表,效率就會很低。

總結

以上是生活随笔為你收集整理的请你解释一下HashMap具体如何实现的?的全部內容,希望文章能夠幫你解決所遇到的問題。

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