HashMap與Hashtable的區別

2021-08-25 12:09:29 字數 910 閱讀 5336

hashtable的應用非常廣泛,hashmap是新框架中用來代替hashtable的類,也就是說建議使用hashmap,不要使用hashtable。可能你覺得hashtable很好用,為什麼不用呢?這裡簡單分析他們的區別。

1.hashtable的方法是同步的,hashmap未經同步,所以在多執行緒場合要手動同步hashmap這個區別就像vector和arraylist一樣。

2.hashtable不允許null值(key和value都不可以),hashmap允許null值(key和value都可以)。

3.hashtable有乙個contains(object value),功能和containsvalue(object value)功能一樣。

4.hashtable使用enumeration,hashmap使用iterator。

以上只是表面的不同,它們的實現也有很大的不同。

5.hashtable中hash陣列預設大小是11,增加的方式是 old*2+1。hashmap中hash陣列的預設大小是16,而且一定是2的指數。

6.雜湊值的使用不同,hashtable直接使用物件的hashcode,**是這樣的:

int hash = key.hashcode();

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

而hashmap重新計算hash值,而且用與代替求模:

int hash = hash(k);

int i = indexfor(hash, table.length);

static int hash(object x)

static int indexfor(int h, int length)

以上只是一些比較突出的區別,當然他們的實現上還是有很多不同的,比如

hashmap對null的操作

HashMap的工作原理和hashtable區別

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

HashMap基礎與併發

執行緒不安全的hashmap,hashmap在併發執行put操作時會引起死迴圈,是因為多執行緒會導致hashmap的entry鍊錶形成環形資料結構,查詢時會陷入死迴圈。預設初始化大小為16,之後每次擴充,容量變為原來的2倍 預設載入因子為0.75 modcount作用 迭代器每修改一次就 1 has...

基礎才是重中之重 執行緒安全的Hashtable

執行緒安全就是多執行緒訪問時 web網頁多使用者訪問乙個頁面時 採用了加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。hashtable 表示鍵 值對的集合,這些鍵 值對根據鍵的雜湊 進行組織,它的k...