HashMap和Hashtable的區別

2021-10-02 13:49:56 字數 1296 閱讀 6163

map中儲存的是具有對映關係的資料,因此map集合中儲存兩組值,一組用於儲存map裡的key,另一組用於儲存map裡的value,key和value中的值可以是任何引用型別的資料,map中的key相當於乙個set集合(所有key沒有順序,key與key之間不可以重複),可以使用keyset()方法,用於返回map裡所有key組成的set集合;map中的value相當於乙個list集合,value與value之間可以重複,每個value可以通過索引查詢,此處的索引是map中的key值;

1、執行緒是否安全:hashmap的執行緒是不安全的;hashtable內部的方法都經過synchronized修飾,所以hashtable的執行緒是安全的;

2、效率:hashmap的執行緒是不安全的,所以效率高;hashtable的執行緒是安全的,所以效率不高;hashtable基本已被淘汰,現在已經不使用了;通過collection工具使得hashmap執行緒變安全從而使用;

3、對null key和null value的支援:hashtable中不允許key和value為null;若將null值放入hashtable就會引發nullpointerexception異常;hashmap允許key和value為null,但是key只能出現一次null值,value中可以出現無數多個的null;

4、初始容量的大小和每次擴容容量的大小的不同:

(1)建立時如果不指定容量初始值,hashtable預設的初始容量大小為11,每次擴容容量變為原來的2n+1;hashmap預設的初始容量大小為16,每次擴容容量變為原來的2倍;

(2)建立時如果指定容量初始值,hashtable就會直接使用指定的容量大小,hashmap會將容量擴充為原來的2的冪次方大小(hashmap中tablesizefor()方法),即hashmap的容量總為2的冪次方大小;

5、底層資料結構:hashmap在解決雜湊衝突時,當鍊表長度大於閾值時,會將鍊錶轉化為紅黑樹,以減少搜尋時間;hashtable沒有此機制;

為了提高hashmap的訪問高效,儘量減少碰撞,即雜湊函式盡量將資料對映的均勻分散;雜湊值的範圍在-2147483648到2147483647之間,中間有40億的長度,但是這個40億長度對於記憶體來說放不下,所以將陣列長度進行取模運算,得到的餘數是存放資料的位置即對應陣列下標,陣列下標的計算方法:「(n-1)&hash」,其中n代表陣列長度;

陣列下標的計算方法計算原理:

取餘操作中的%操作,當除數是2的冪次方時等價於其除數減一的&操作,採用二進位制的&操作相當於對%提高運算效率。

eg:當除數是2的冪次方時等價於其除數減一的&操作:hash%length==hash&(length-1)

前提條件:length是2的冪次方。

HashMap的工作原理和hashtable區別

1.hashmap的工作原理?hashmap底層是陣列 鍊錶 以陣列儲存元素,如有hash相同的元素,在陣列結構中,建立鍊錶結構,再把hash相同的元素放到鍊錶的下乙個節點 基於hashing 雜湊法 雜湊法 是一種將字元組成的字串轉換為固定長度的數值或索引值的方法 的原理。通過put get 方法...

HashMap和LinkedHashMap的區別

hashmap,linkedhashmap,treemap都屬於map map 主要用於儲存鍵 key 值 value 對,根據鍵得到值,因此鍵不允許鍵重複,但允許值重複。hashmap 是乙個最常用的map,它根據鍵的hashcode 值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度。ha...

HashMap和LinkedHashMap的區別

hashmap,linkedhashmap,treemap都屬於map map 主要用於儲存鍵 key 值 value 對,根據鍵得到值,因此鍵不允許鍵重複,但允許值重複。hashmap 是乙個最常用的map,它根據鍵的hashcode 值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度。ha...