在面试的时候,如果面试官问道集合,这两个大师绝对是少不了的,当然这个也是看你对基础的掌握是否透彻
一:选手介绍:
面试官让你说说他们二者的区别其实就是让你介绍一把而已
1:Hashtable继承自Dictionary类,而HashMap是Map接口的一个实现。这里要说明一下Dictionary类是jdk1.0中就有的,而Map接口是1.2之后才有的,当然与此同时Hashtable也实现了Map接口。
2:最重要的区别:Hashtable是线程安全的,而HashMap是线程不安全的。也就是说当我们的应用处于多个线程访问时,Hashtable是安全的,而HashMap要实现同步则要通过额外的同步机制:一般Collections的一个静态方法得到解决:Map m =
Collections.synchronizedMap(new HashMap(...));这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3:HashMap可以用null做为键(当然只能有一个),还可以有多个null的值,而Hashtable不可以存在null的键值。
当需要判断是否存在某个键映射一个值时:HashMap去掉了Hashtable的contains(Object value)方法,保留了containsValue(Object value)和containsKey(Object key)方法,因为contains和containsValue方法确实太像。
注:
get(Object key) 返回与指定键关联的值;
containsKey(Object key) 如果Map包含指定键的隐射,则返回true;
containsValue(Object value) 如果Map将一个或多个键隐射到指定值,则返回true;
isEmpty()如果Map不包含键-值隐射,则返回true;
二:优缺点比较:
这个说透彻很重要
1:效率:由于Hashtabe是线程安全的,当大量的并发访问的时候,速度肯定要比HashMap慢的多,当然这个的前提是:我们的程序不需要保证线程安全(同步)。
也就是说在不需要保证线程同步的情况下:我们应该选择Hashmap。
大多数的应用是需要保证线程安全的:这个时候好像Hashtable先天有优势,但HashMap使用上面(区别:2)的方法一样可以保证线程安全,在这种情况下天才和后天努力者的对决好像势均力敌,难分高下,两者都可以选择。
2:空间:Hashtable的初始容量为11,而HashMap初始化容量为16.并且他们的加载因子默认都为0.75。前者的增加方式是 old*2+1;后者为old*2;也就是说当Hashtable中存在8个键值时,它的容量会自动增加到23.而HashMap中存在12个键值时,它会增加容量到32。
这样看来,一个是基数小增加快,一个是基数大增加慢。两者都可以选择。
3:官方建议:Sun的jdk不断更新,很多的类与方法不断的被重写和淘汰,显然后生的要比早生的先进,所以java官方还是支持HashMap的。像Dictionary也早已注明“已过时,建议使用Map接口”。当然Hashtable线程同步的优点还是比较突出的(例如属性文件),觉类似于HashMap的一个子类。
三:最后建议:
最后给出自己的结论
HashMap在与Hashtable的较量中胜出
分享到:
相关推荐
经典讲解List和ArrayList和Vector和HashTable和HashMap区别
hashtable和hashmap的区别
HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别。HashMap、HashTable和HashSet是Java中常用的数据结构,它们的底层实现原理以及区别如下:HashMap底层实现原理: HashMap基于哈希表(HashTable)...
Hashtable和HashMap区别以及他们的具体介绍
记得刚毕业那会准备面试,看过不少面试题,里面有个说出HashMap和HashTable不同的题目,我那会面试的时候也遇到不少次这个问题,还隐约记得当时的...HashTable是比较旧的版本;HashTable是线程安全的,而HashMap是非线
Hashtable和HashMap的区别: 1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类; 2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的...
比较分析Vector、ArrayList和hashtable hashmap数据结构
比较Vector、ArrayList和hashtable hashmap
List、ArrayList、Vector及map、HashTable、HashMap分别的区别
第9讲 对比Hashtable、HashMap、TreeMap有什么不同?1
HashTable和HashMap主要的区别有:线程安全性,同步(synchronization),以及速度。接下来通过本文给大家简单介绍下HashTable和HashMap的区别,需要的的朋友参考下吧
HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有...
hashmap与hashtable区别 主要是应用于存值的数值对
Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.
初级程序员面试经常问道的问题,HashMap与HashTable区别,希望有帮助
hashMap和hashTable的区别,大家可以下载学习学习。
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础...
HashTable不支持空键值对! 而HashMap支持空键值对!
Hashmap是开发中用的比较多的一种集合,是线程不安全的,Hashtable的方法上大多都加了synchronized所以是线程安全的,所以效率并不高。这也是它们最大的不同。 2.Hashtable继承的类和实现的接口:(Dictionary类...
hashmap和hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 1. HashMap几乎可以等价于Hashtable,...