HashMap的效能因子(Java程式設計思想)

2021-08-27 19:22:48 字數 569 閱讀 7597

我們可以通過手工調整hashmap來提高其效能,從而滿足我們特定應用的需求。為了在調整hashmap時能理解效能的問題,某些術語是必須要了解的:

。容量:表中的桶位數

。初始容量:表在建立時所擁有的桶位數。hashmap和hashset都具有允許指定初始容量的構造器

。尺寸:表中當前儲存的項數

。負載因子:尺寸/容量。空表的負載因子為0,而半滿表的負載因子為0.5,依次類推。負載輕的表產生的衝突可能性較小,因此對於插入和查詢都是最理想的(但是會減慢使用迭代器進行遍歷的過程)。hashmap和hashset都具有允許指定初始容量的構造器,當負載情況達到負載因子的水平時,容器將會自動增加容量,實現方式是容量大致加倍,並重新將現在物件分布到新的桶位中(這被稱為再雜湊)。

hashmap使用的預設負載因子為0.75(只有當表達到四分之三滿時,才會進行再雜湊),這個因子在時間和空間代價之間達到了平衡。更高的負載因子可以降低表所需的空間,但是會增加查詢代價,這很重要,因為查詢是我們在大多數時間裡所進行的操作(包括get和put)。

如果您知道將要在hashmap中儲存多少項,那麼建立乙個具有恰當大小的初始容量將可以避免自動再雜湊的開銷。

HashMap的負載因子

下面是hashmap的乙個建構函式,兩個引數initialcapacity,loadfactor 這關係hashmap的迭代效能。constructs an empty hashmap with the specified initial capacity and load factor.param...

HashMap 負載因子

static final float default load factor 0.75f 大概意思就是說,在理想情況下,使用隨機雜湊碼,節點出現的頻率在hash桶中遵循泊松分布,同時給出了桶中元素個數和概率的對照表。從上面的表中可以看到當桶中元素到達8個的時候,概率已經變得非常小,也就是說用0.75...

HashMap容量和負載因子

引自 hashmap底層資料結構是陣列 鍊錶,jdk1.8中還引入了紅黑樹,當鍊表長度超過8個時,會將鍊錶轉成紅黑樹,以提公升其查詢效能。那麼,給出乙個節點,hashmap是如何確定這個節點應該放在具體哪個位置呢?以jdk1.8為例 final v putval int hash,k key,v v...