HashTable和HashMap區別
第一,繼承的父類不同。
Hashtable繼承自Dictionary類,而HashMap繼承自AbstractMap類。但二者都實現了Map接口。
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
第三,是否提供contains方法
HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因為contains方法容易讓人引起誤解。
Hashtable則保留了contains,containsValue和containsKey三個方法,其中contains和containsValue功能相同。
第四,key和value是否允許null值。
其中key和value都是對象,并且不能包含重復key,但可以包含重復的value。
Hashtable中,key和value都不允許出現null值。
HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null值時,可能是 HashMap中沒有該鍵,也可能使該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。
第五,兩個遍歷方式的內部實現上不同。
Hashtable、HashMap都使用了 Iterator。而由于歷史原因,Hashtable還使用了Enumeration的方式 。
第六,hash值不同。
哈希值的使用不同,HashTable直接使用對象的hashCode。而HashMap重新計算hash值。
第七,內部實現使用的數組初始化和擴容方式不同。
Hashtable和HashMap它們兩個內部實現方式的數組的初始大小和擴容的方式。HashTable中hash數組默認大小是11,增加的方式是 old*2+1。
HashMap中hash數組的默認大小是16,而且一定是2的指數。
新聞熱點
疑難解答