HashMap的擴容機制


底層的兩個變量

  • loadFactor:加載因子,默認是0.75(是經過反復測試的)
  • threshold:當map里面的數據大於該值就會進行擴容(threshold=容量*加載因子)

HashMap提供四種構造方法:一是給定初始容量和加載因子的構造方法,二是給定初始容量,使用默認的加載因子,三是什么參數都不給,使用默認的初始容量和默認的加載因子,四是傳進一個Map,使用默認的加載因子。

但是,無論使用什么構造方法,HashMap都沒有進行初始化容量設置,都是一個空的HashMap,這就是HashMap的懶加載機制,只有當你第一次添加元素,才會進行第一次的容量設置。

第一次擴容(分兩種情況):

第一種:沒有設置初始化容量,使用默認的DEFAULT_INITIAL_CAPACITY=16進行初始化設置;

第二種:設置了初始化容量;當設定值是2的n次方時,就按該值設置,否則,會找到樂意大於該值的但是最接近的2的n次方的值進行設置

第二次擴容:

在容量不大於最大值(1<<30,即1073741824)的情況下,默認都是擴容為兩倍:
新容量 = 舊容量*2
新threshold = 新容量*負載因子

如果容量超出了這個數,則不再增長,且閾值會被設置為Integer.MAX_VALUE( 2^31-1,即永遠不會超出閾值了)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM