HashMap和HashTable的區別

2021-08-21 12:01:49 字數 1011 閱讀 8530

hashmap和hashtable的區別

hashtable是執行緒安全,而hashmap則非執行緒安全。

hashtable的實現方法裡面都新增了synchronized關鍵字來確保執行緒同步。所以hashmap效能高。

hashmap可以使用null作為key,而hashtable則不允許null作為key。

hashmap繼承了abstractmap,hashtable繼承dictionary抽象類,兩者均實現map介面。 

hashmap的初始容量為16,hashtable初始容量為11,兩者的填充因子預設都是0.75。

hashmap擴容時是當前容量翻倍即:capacity*2,hashtable擴容時是容量翻倍+1即:capacity*2+1。

hashmap和hashtable的底層實現都是陣列+鍊錶結構實現。

判斷是否含有某個鍵 

在hashmap 中,null 可以作為鍵,這樣的鍵只有乙個;可以有乙個或多個鍵所對 

應的值為null。當get()方法返回null 值時,既可以表示hashmap 中沒有該鍵,也可 

以表示該鍵所對應的值為null。因此,在hashmap 中不能用get()方法來判斷hashm 

ap 中是否存在某個鍵,而應該用containskey()方法來判斷。hashtable 的鍵值都不能 

為null,所以可以用get()方法來判斷是否含有某個鍵。

兩者計算hash的方法不同: 

hashtable計算hash是直接使用key的hashcode對table陣列的長度直接進行取模: 

int hash = key.hashcode();

int index = (hash & 0x7fffffff) % tab.length;

hashmap則是二次hash():

static int hash(int h) 

static int indexfor(int h, int length)

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...