HashMap和HashTable的区别

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


HashMap的继承关系.png
HashTable的继承关系.png

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到底哪不同?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容