問七:HashTable和HashMap的區別?

 

①繼承不同

public class Hashtable extends Dictionary implements Map

public class HashMap extends AbstractMap implements Map

②Hashtable 中的方法是同步的,而HashMap中的方法在缺省情況下是非同步的

在多線程併發的環境下,可以直接使用Hashtable,但是要使用HashMap的話就要自己增加同步處理了(Collections.synchronizedMap(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值(用低16位與高16位進行異或操作,並且讓容量大小爲2的n次方來實現用與代替求模

⑥Hashtable和HashMap它們兩個內部實現方式的數組的初始大小和擴容的方式

HashTable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數

HashMap線程不安全,數組+鏈表+紅黑樹

Hashtable線程安全,鎖住整個對象,數組+鏈表

附加知識:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章