HsahMap原始碼分析(jdk8)

2021-10-03 12:39:24 字數 1787 閱讀 1309

基於雜湊表的 map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。(除了非同步和允許使用 null 之外,hashmap 類與 hashtable 大致相同。)此類不保證對映的順序,特別是它不保證該順序恆久不變。

此實現假定雜湊函式將元素適當地分布在各桶之間,可為基本操作(get 和 put)提供穩定的效能。迭代 collection 檢視所需的時間與 hashmap 例項的「容量」(桶的數量)及其大小(鍵-值對映關係數)成比例。所以,如果迭代效能很重要,則不要將初始容量設定得太高(或將載入因子設定得太低)。

hashmap 的例項有兩個引數影響其效能:初始容量 和載入因子。容量 是雜湊表中桶的數量,初始容量只是雜湊表在建立時的容量。載入因子 是雜湊表在其容量自動增加之前可以達到多滿的一種尺度。當雜湊表中的條目數超出了載入因子與當前容量的乘積時,則要對該雜湊表進行 rehash 操作(即重建內部資料結構),從而雜湊表將具有大約兩倍的桶數。

通常,預設載入因子 (.75) 在時間和空間成本上尋求一種折衷。載入因子過高雖然減少了空間開銷,但同時也增加了查詢成本(在大多數 hashmap 類的操作中,包括 get 和 put 操作,都反映了這一點)。在設定初始容量時應該考慮到對映中所需的條目數及其載入因子,以便最大限度地減少 rehash 操作次數。如果初始容量大於最大條目數除以載入因子,則不會發生 rehash 操作。

如果很多對映關係要儲存在 hashmap 例項中,則相對於按需執行自動的 rehash 操作以增大表的容量來說,使用足夠大的初始容量建立它將使得對映關係能更有效地儲存。

hashmap是非執行緒安全的,要想使其變為執行緒安全的需要使用collections.synchronizedmap方法來「包裝」該對映,最好在建立時完成這一操作,以防止對對映進行意外的非同步訪問,如下所示:

map m = collections.synchronizedmap(new hashmap(...));
這裡直接看這位大哥的文章,寫得很仔細

isempty(): 如果此對映不包含鍵-值對映關係,則返回 true。

public boolean isempty() 

public int size()

entryset().size()方法是用來判斷對映個數,如果沒有則返回0,我們通過isempty()方法判斷size()返回個數是否為0,如果為0,則返回true。

entryset():返回此對映所包含的對映關係的set檢視。

containsvalue():如果此對映將乙個或多個鍵對映到指定值,則返回 true。

public boolean containsvalue(object value) 

} else

}return false;

}

從上面**我們可以看出這個value分為兩種情況,null和非null,我們構建乙個迭代器,通過迭代器對這個對映關係進行遍歷,如果存在則返回true不存在返回false。

get(): 返回指定鍵所對映的值;如果對於該鍵來說,此對映不包含任何對映關係,則返回null

public v get(object key) 

static final int hash(object key)

final nodegetnode(int hash, object key) while ((e = e.next) != null);}}

return null;

}

稍後====

JDK原始碼分析 Vector

vector和arraylist有一定的不同 int newcapacity oldcapacity capacityincrement 0 capacityincrement oldcapacity 從這一句我們可以看出 增長容量 capacityincrement 0 增長倍數 陣列數量 舊容量...

JDK原始碼分析 Collections

1.集合框架圖 hashmap是通過 拉鍊法 實現的雜湊表。它包括幾個重要的成員變數 table,size,threshold,loadfactor,modcount。table是乙個entry陣列型別,而entry實際上就是乙個單向鍊錶。雜湊表的 key value鍵值對 都是儲存在entry陣列...

jdk原始碼分析之 HashTable

hashtable整體架構 hashtable實現雜湊表,該雜湊表將鍵對映到值。可以是任何不為空的key或者value。主要是因為hashtable的儲存或者檢索key必須實現hashcode 和equals方法,其類圖如下 類註解資訊 重要的成員變數 存放雜湊表的資料 private transi...