1、HashTable和HashMap均实现了Map、Cloneable、Serializable接口,但是HashMap继承至实现了Map接口的AbstractMap类,而HashTable除了实现Map接口,还继承了已被废弃的Dicationary类,如下图所示:


2、HashMap的key和value值可以为null,而HashTable遇到null会抛出NullPointerException。HashMap遇到null的key会将其赋值为0。
3、HashTable是线程安全的,而HashMap不是。如果你需要线程安全的HashMap,使用ConcurrentHashMap。或者用如下代码让HashMap同步:
Map map = Collections.synchronizeMap(hashMap);
如果不需要线程安全,使用HashMap,HashTable已经不再推荐使用。
4、HashMap的迭代器(Iterator)是fail-fast(快速失败)迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
感谢参考文章:
1、HashMap和Hashtable的区别
2、 HashMap和HashTable到底哪不同?
网友评论