1绞佩、HashTable和HashMap均實(shí)現(xiàn)了Map购城、Cloneable似袁、Serializable接口,但是HashMap繼承至實(shí)現(xiàn)了Map接口的AbstractMap類呜师,而HashTable除了實(shí)現(xiàn)Map接口,還繼承了已被廢棄的Dicationary類昼浦,如下圖所示:
2搬设、HashMap的key和value值可以為null,而HashTable遇到null會(huì)拋出NullPointerException膀捷。HashMap遇到null的key會(huì)將其賦值為0迈嘹。
3、HashTable是線程安全的全庸,而HashMap不是秀仲。如果你需要線程安全的HashMap,使用ConcurrentHashMap壶笼∩窠或者用如下代碼讓HashMap同步:
Map map = Collections.synchronizeMap(hashMap);
如果不需要線程安全,使用HashMap覆劈,HashTable已經(jīng)不再推薦使用保礼。
4、HashMap的迭代器(Iterator)是fail-fast(快速失敗)迭代器责语,而Hashtable的enumerator迭代器不是fail-fast的炮障。所以當(dāng)有其它線程改變了HashMap的結(jié)構(gòu)(增加或者移除元素),將會(huì)拋出ConcurrentModificationException坤候,但迭代器本身的remove()方法移除元素則不會(huì)拋出ConcurrentModificationException異常胁赢。但這并不是一個(gè)一定發(fā)生的行為,要看JVM白筹。這條同樣也是Enumeration和Iterator的區(qū)別智末。
感謝參考文章:
1、HashMap和Hashtable的區(qū)別
2徒河、 HashMap和HashTable到底哪不同系馆?