hashmap 中的初始容量和載入因子之間的聯絡

2021-07-06 06:28:14 字數 546 閱讀 4784

/*

構造乙個新的空 set,其底層 hashmap 例項具有指定的初始容量和指定的載入因子

*/public

hashset(

intinitialcapacity, 

float

loadfactor)  

初始容量 是雜湊表在建立時的容量。

載入因子 是雜湊表在其容量自動增加之前可以達到多滿的一種尺度。

當雜湊表中的條目數超出了載入因子與當前容量的乘積時,通過呼叫 rehash 方法將容量翻倍。

比如說向水桶中裝水,此時hashmap就是乙個桶, 這個桶的容量就是載入容量,而載入因子就是你要控制向這個桶中倒的水不超過水桶容量的比例,比如載入因子是0.75 ,那麼在裝水的時候這個桶最多能裝到3/4 處,超過這個比例時,桶會

自動擴容。因此,這個桶最多能裝水 = 桶的容量 * 載入因子。

如果桶的容量是40,載入因子是0.75 那麼你的桶最多能裝40*0.75 = 30的水,

如果你裝了30的水還想繼續裝水,那麼就該用大一點的桶,呼叫rehash就是負責增加桶的容量的方法。

HashMap的初始容量設定為多少合適?

我們知道對於list map這種底層是基於陣列的動態容器,在擴容時會進行陣列複製,因此為了避免這種額外開銷,應該盡量在建立時指定大小。對於沒有負載因子的如list,其擴容策略為滿了後下次插入進行擴容,因此初始化大小為需要大小即可 對於存在負載因子的hashmap hashset等,其擴容策略為本次插...

HashMap的初始容量機制及擴容機制

通常在我們的應用中,hashmap是用到最多的資料結構之一,在jdk1.8之前,它的底層結構是陣列 鍊錶,而在jdk1.8之後,為了查詢效率的優化 主要是當雜湊碰撞較多的時候 它的底層結構變成了陣列 鍊錶 紅黑樹。今天就來 一下hashmap的擴容機制,這也是面試時被問到最多的問題。首先看一下原始碼...

HashMap初始容量為什麼是16

這裡不講 只講思路。要稍微懂點二進位制。hashmap的結構是陣列加鍊表,容量指的是陣列長度。元素放入陣列的哪個位置?這由算出來的hashcode 跟 1111 作與運算 得出陣列下標。hashcode具體演算法我也不知道 為什麼是1111,因為0000 1111共16個數,跟陣列下標 容量都一致。...