请你解释一下HashMap具体如何实现的?
生活随笔
收集整理的這篇文章主要介紹了
请你解释一下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具体如何实现的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请你说明一下TreeMap的底层实现?
- 下一篇: 请你简单介绍一下ArrayList和Li