HashMap原始碼解讀

2021-09-25 20:10:49 字數 950 閱讀 4368

hashmap原始碼分析

me: 對集合檢視的迭代,hashmap的桶數加實際大小與時間成正比,也就是說,不可以把桶樹設定的太多或負載因子太小。

o: 對集合檢視的迭代需要與hashmap 例項的「容量」(桶數)加上其大小(鍵值對映的數量)成比例的時間。 因此,如果迭代效能很重要,則不要將初始容量設定得太高(或負載因子太低)非常重要。

me: 影響hashmap例項效能的有兩個引數,乙個是初始容量(雜湊表中的桶數),乙個是載入因子。當雜湊表中的條目數超過當前容量和載入因子的乘積時,雜湊表會再雜湊,會建立乙個容量是當前桶數二倍的例項。

o: hashmap的乙個例項有兩個影響其效能的引數:初始容量和負載因子。容量是雜湊表中的桶數,初始容量只是建立雜湊表時的容量。載入因子是在自動增加容量之前允許雜湊表獲取的完整程度的度量。當雜湊表中的條目數超重載入因子和當前容量的乘積時,雜湊表將被重新雜湊(即,重建內部資料結構),以便雜湊表具有大約兩倍的桶數。

me: 預設載入因子是0.75,當載入因子過高時會節省空間,但是會增加查詢成本。

me: hashmap不是同步的,如果要同步的話需要使用map m = collections.synchronizedmap(new hashmap(…));這最好在建立時完成,以防止對對映的意外不同步訪問。

o: 所有這個類的「集合檢視方法」返回的迭代器都是快速失敗的:如果在建立迭代器之後的任何時候對對映進行結構修改,除了通過迭代器自己的remove 方法之外,迭代器將丟擲。因此,在併發修改的情況下,迭代器快速而乾淨地失敗,而不是在未來的未確定時間冒著任意的,非確定性行為的風險。

HashMap原始碼解讀

一 建立乙個hashmap都做了哪些工作?mapmap new hashmap hahmap無參構造方法 public hashmap 可以看到設定了載入因子 預設0.75 閾值 預設容量16 預設載入因子0.75 12 table是hashmap內部資料儲存結構entry陣列。當hashmap的s...

HashMap原始碼解讀

今日閒來無事,擷取一段hashmap的 分析一下 int hash hash key 根據key 的hashcode 計算hash值 int i indexfor hash,table.length 根據hash值 計算出再陣列中的位置 for entrye table i e null e e.n...

HashMap原始碼解讀

public v put k key,v value static final int hash object key final v putval int hash,k key,v value,boolean onlyifabsent,boolean evict 如果在遍歷鍊錶中途,發現可以值相等...