A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© SenGoo 中级黑马   /  2014-10-22 12:10  /  2277 人查看  /  17 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

HashTable和HashMap有什么区别?具体使用时应该注意什么?

17 个回复

倒序浏览
本帖最后由 紫薰iy 于 2014-10-22 12:28 编辑

第一,继承的父类不同。

Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。

第二,线程安全性不同。

Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步,但使用HashMap时就必须要自己增加同步处理。


第三,是否提供contains方法

HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。

Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。

第四,key和value是否允许null值。

其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。

Hashtable中,key和value都不允许出现null值。

HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

第五,两个遍历方式的内部实现上不同。

Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

第六,hash值不同。

哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

第七,内部实现使用的数组初始化和扩容方式不同。

Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。

HashMap中hash数组的默认大小是16,而且一定是2的指数。



来源http://blog.csdn.net/kingzone_2008/article/details/8179701

点评

很专业!  发表于 2014-11-3 08:11
回复 使用道具 举报
你得分还不够啊?建议你在这里面发点分享或者精髓知识点什么的,让 版主给个技术分,不比黑马币强 ?
回复 使用道具 举报
泡沫__opt 发表于 2014-10-22 13:41
你得分还不够啊?建议你在这里面发点分享或者精髓知识点什么的,让 版主给个技术分,不比黑马币强 ? ...

好主意!选择主题分类是什么啊?其他吗?
回复 使用道具 举报
紫薰iy 发表于 2014-10-22 12:26
第一,继承的父类不同。

Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map ...

很详实!谢谢!
回复 使用道具 举报
SenGoo 发表于 2014-10-22 15:25
好主意!选择主题分类是什么啊?其他吗?

其他就行啊~~或者有个什么心得的好像……
回复 使用道具 举报
SenGoo 中级黑马 2014-10-22 17:00:14
7#
泡沫__opt 发表于 2014-10-22 16:42
其他就行啊~~或者有个什么心得的好像……

都没人黑黑马币!
回复 使用道具 举报
看你混技术分也挺难的,支持一下。
回复 使用道具 举报
qq8921310 发表于 2014-10-22 20:12
看你混技术分也挺难的,支持一下。

你这么多黑马币应该给他两个~~
回复 使用道具 举报
泡沫__opt 发表于 2014-10-23 07:33
你这么多黑马币应该给他两个~~

你的 分都够了,可以把剩下都给他
回复 使用道具 举报
qq8921310 发表于 2014-10-23 08:56
你的 分都够了,可以把剩下都给他

…………你得好像比我的多……多了……
嘻嘻~~
回复 使用道具 举报
紫薰iy 发表于 2014-10-22 12:26
第一,继承的父类不同。

Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map ...

高,赞一个!
回复 使用道具 举报
紫薰iy 发表于 2014-10-22 12:26
第一,继承的父类不同。

Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map ...

写的非常详细,受教了、
回复 使用道具 举报
两者的区别:
Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
回复 使用道具 举报
颜仔 发表于 2014-11-3 02:40
两者的区别:
Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率 ...

嗯呢。同意
回复 使用道具 举报
感觉就是一个是旧的一个是新的    用新的就好了  
回复 使用道具 举报
前者线程同步,后者是线程不同步,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马