關hashMap跟hashTable的區別

2022-05-04 02:42:09 字數 1737 閱讀 1239

1.hashmap和hashtable都實現了map介面

2.hashmap是非synchronized,而hashtable是synchronized

3.hashtable使用enumeration,hashmap使用iterator

4.hashtable直接使用物件的hashcode,hashmap重新計算hash值,而且用與代替求模

解析:

hashtable和hashmap區別

①繼承不同。

public

class hashtable extends dictionary implements map

public

class hashmap extends abstractmap implements map

②hashtable 中的方法是同步的,而hashmap中的方法在預設情況下是非同步的。在多執行緒併發的環境下,可以直接使用hashtable,但是要使用hashmap的話就要自己增加同步處理了。

③hashtable中,key和value都不允許出現null值。

在hashmap中,null可以作為鍵,這樣的鍵只有乙個;可以有乙個或多個鍵所對應的值為null。當get()方法返回null值時,即可以表示 hashmap中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在hashmap中不能由get()方法來判斷hashmap中是否存在某個鍵, 而應該用containskey()方法來判斷。

④兩個遍歷方式的內部實現上不同。

hashtable、hashmap都使用了 iterator。而由於歷史原因,hashtable還使用了enumeration的方式 。

⑤雜湊值的使用不同,hashtable直接使用物件的hashcode。而hashmap重新計算hash值。

⑥hashtable和hashmap它們兩個內部實現方式的陣列的初始大小和擴容的方式。hashtable中hash陣列預設大小是11,增加的方式是 old*2+1。hashmap中hash陣列的預設大小是16,而且一定是2的指數。 

1.map是乙個介面,hashtable,hashmap都是它的實現。

2.由於hashtable是執行緒安全的也是synchronized,所以在單執行緒環境下它比hashmap要慢。如果你不需要同步,只需要單一執行緒,那麼使用hashmap效能要好過hashtable。

3.hashmap的迭代器(iterator)是fail-fast迭代器,而hashtable的enumerator迭代器不是fail-fast的。所以當有其它執行緒改變了hashmap的結構(增加或者移除元素),將會丟擲concurrentmodificationexception,但迭代器本身的remove()方法移除元素則不會丟擲concurrentmodificationexception異常。但這並不是乙個一定發生的行為,要看jvm。這條同樣也是enumeration和iterator的區別。

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

int hash =key.hashcode();

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

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

int hash =hash(k);

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

Hashtable和HashMap類的區別

下面再轉一篇關於兩個類的區別,比較簡單的過一下 最近同學找工作,經常被問到這個問題rt,所以。hashtable的應用非常廣泛,hashmap是新框架中用來代替hashtable的類,也就是說建議使用hashmap,不要使用hashtable。這裡簡單分析他們的區別。1.hashtable的方法是同...

HashMap以及跟HashMap相關的內容

hashmap相信大家都用過,是以這樣的格式儲存的。其實內部真正用於儲存的是entry的陣列table 桶 下面就是源 了已經標註出來了 emprty table是個空表,用於是初始化時使用的。default load factor是負載因子,default initial capacity是初始化...

hashtable 和 hashmap的區別

hashtable的應用非常廣泛,hashmap是新框架中用來代替hashtable的類,也就是說建議使用hashmap,不要使用hashtable。可能你覺得hashtable很好用,為什麼不用呢?這裡簡單分析他們的區別。1.hashtable的方法是同步的,hashmap未經同步,所以在多執行緒...