← 返回首页
JavaSE系列教程(四十七)
发表时间:2020-02-01 14:12:11
讲解HashMap与Hashtable的区别。

大家在面试时经常被问到HashMap与Hashtable的区别。从二者的源码中可以直接看出来,HashMap 继承自 AbstractMap,而 Hashtabl 继承自 Dictionary。

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable

简单小结二者的区别如下:

1).HashMap与Hashtable从用法上来说基本一样,都是表示键值对的一种数据类型。

2).Hashtable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。

3).Hashtable 在很多方法定义时都会加上 synchronized 关键字,说明 Hashtabl 是线程安全的,而 HashMap 并不能保证线程安全。

4).HashMap 中把 contains 方法去掉的原因主要它容易引起混淆,不如 containsKey 和 containsValue 表达的准确。而 Hashtable 中 contains 方法也是调用 containsKey 方法来实现的。

5).Hashtable虽然是同步的,但是目前也不推荐使用。因为它是历史遗留类,内部优化不好。强烈推荐使用ConcurrentHashMap替代Hashtable,完全没必要使用Hashtable.