这问题是面试官经常考到的问题之一,一般来说将下面几点背给面试官听就可以了
答:二者都实现了Map接口,是将惟一键映射到特定的值上;主要区别在于:
1)HashMap没有排序,允许一个null键和多个null值,而Hashtable不允许;
2)HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey,因为contains方法容易让人引起误解;
3)Hashtable继承自Dictionary类 ,HashMap是Java1.2引进的Map接口的实现 ;
4)Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问
Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
5)Hashtable和HashMap采用的hash/rehash算法大致一样,所以性能不会有很大的差异。
我们亲自去看一下,加深印象
首先我用到的工具是
eclipse (主要是为了看源码)
JDK_API_1_6_zh_CN.CHM (JavaSE中文版的文档)
<h5>#1 二者都实现了Map接口,是将惟一键映射到特定的值上</h5>
从JDK_API这个文档,可以看到它们两个的接口都是Map
<h5>#2 Hashtable继承自Dictionary类 ,HashMap是Java1.2引进的Map接口的实现 </h5>
看JDK_API文档
<h5>#3 HashMap没有排序,允许一个null键和多个null值,而Hashtable不允许</h5>
如果想要看到这个最好还是看一下JDK_API的介绍,这个是入门最方便的手段
这段话,可以得出三个知识点:
1.HashMap是非同步的,也就说某些方法没有用synchronized 修饰
HashTable 是同步的,也就说某些方法用synchronized 修饰
注意:是某些方法,不是全部方法(可以用过看文档,也可以通过eclipse,建议eclipse,清晰)
所以在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
2.HashMap允许一个或多个key为null,Hashtable 是不可以的
3.HashMap不保证映射的顺序,这个是根据算法来决定的
<h5>#4 Hashtable和HashMap采用的hash/rehash算法大致一样,所以性能不会有很大的差异.</h5>
有兴趣的,可以去看一下数据结构相关的书本,这里就不演示了