HashMap的扩容机制---resize()
生活随笔
收集整理的這篇文章主要介紹了
HashMap的扩容机制---resize()
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
擴容
就是重新計算容量,向HashMap對象里不停的添加元素,而HashMap對象內部的數組無法裝載更多的元素時,對象就需要擴大數組的長度,以便能裝入更多的元素。
什么時候擴容?
當向容器添加元素的時候,會判斷當前容器的元素個數,如果大于等于閾值—即當前數組的長度乘以加載因子的值的時候,就要自動擴容啦。
怎么擴容?
1、jdk1.7
假設了我們的hash算法就是簡單的用key mod 一下表的大小(也就是數組的長度)。
其中的哈希桶數組table的size=2, 所以key = 3、7、5,put順序依次為 5、7、3。在mod 2以后都沖突在table[1]這里了。這里假設負載因子 loadFactor=1,即當鍵值對的實際大小size 大于 table的實際大小時進行擴容。接下來的三個步驟是哈希桶數組 resize成4,然后所有的Node重新rehash的過程。
2、jdk1.8
因此,我們在擴充HashMap的時候,不需要像JDK1.7的實現那樣重新計算hash,只需要看看原來的hash值新增的那個bit是1還是0就好了,是0的話索引沒變,是1的話索引變成“原索引+oldCap。既省去了重新計算hash值的時間,而且同時,由于新增的1bit是0還是1可以認為是隨機的,因此resize的過程,均勻的把之前的沖突的節點分散到新的bucket了
總結
以上是生活随笔為你收集整理的HashMap的扩容机制---resize()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hashmap链表长度为8时转换成红黑树
- 下一篇: HashMap的存储过程