HashMap与Hashtable的区别是面试中经常遇到的一个问题。这个问题看似简单,但如果深究进去,也能了解到不少知识。本文对两者从来源,特性,算法等多个方面进行对比总结。力争从多角度,全方位的展示二者的不同。
1、产生时间
Hashtable是java一开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2。虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。造成这样的原因一方面是因为Hashtable是线程安全的,效率比较低。另一方面可能是因为Hashtable没有遵循驼峰命名法吧。
2、 继承的父类不同
HashMap继承自AbstractMap类,而HashTable继承自Dictionary类(Dictionary类是现已被废弃)。它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。
3、对外提供的接口不同
Hashtable比HashMap多提供了elments() 和contains() 两个方法。
elments() 方法继承自Hashtable的父类Dictionnary。elements() 方法用于返回此Hashtable中的value的枚举。
contains()方法判断该Hashtable是否包含传入的value。它的作用与HashMap的containsValue()一致。事实上,contansValue() 就只是调用了一下contains() 方法。
4、 对Null key 和Null value的支持不同
Hashtable既不支持Null