美文网首页
浅入深出JavaSE面试题:HashMap与HashTable区

浅入深出JavaSE面试题:HashMap与HashTable区

作者: bug小王子 | 来源:发表于2017-03-12 18:21 被阅读0次

这问题是面试官经常考到的问题之一,一般来说将下面几点背给面试官听就可以了

答:二者都实现了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

Map接口.png

<h5>#2 Hashtable继承自Dictionary类 ,HashMap是Java1.2引进的Map接口的实现 </h5>

看JDK_API文档

HashMap体系.png
HashTable体系.png

<h5>#3 HashMap没有排序,允许一个null键和多个null值,而Hashtable不允许</h5>

如果想要看到这个最好还是看一下JDK_API的介绍,这个是入门最方便的手段

HashMap文档.png
这段话,可以得出三个知识点:
1.HashMap是非同步的,也就说某些方法没有用synchronized 修饰
   HashTable 是同步的,也就说某些方法用synchronized 修饰
   注意:是某些方法,不是全部方法(可以用过看文档,也可以通过eclipse,建议eclipse,清晰)
   所以在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
2.HashMap允许一个或多个key为null,Hashtable 是不可以的
3.HashMap不保证映射的顺序,这个是根据算法来决定的

<h5>#4 Hashtable和HashMap采用的hash/rehash算法大致一样,所以性能不会有很大的差异.</h5>

有兴趣的,可以去看一下数据结构相关的书本,这里就不演示了

相关文章

网友评论

      本文标题:浅入深出JavaSE面试题:HashMap与HashTable区

      本文链接:https://www.haomeiwen.com/subject/bhqtnttx.html