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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李振元 黑马帝   /  2011-12-10 12:24  /  3595 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李振元 于 2011-12-10 18:09 编辑

请问一下HashMap、HashSet、Hashtable的区别与联系

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1 一起加油!!

查看全部评分

6 个回复

倒序浏览
李明 黑马帝 2011-12-10 12:50:23
沙发
Hashtable:底层数据结构是哈希表,不能存null,线程同步。出现与jdk1.0版本,效率低
HashMap:底层数据结构是哈希表,能存null值,线程不同步。出现与jdk1.2版本,效率高
HashSet:底层数据结构是哈希表,元素无序,不同步。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
HashMap、HashSet、Hashtable:
相同点
   1.都是不允许重复的集合;
   2.都是根据hash码判断是否相同的。
不同点
   1.HashMap和Hashtable属于Map集合,是双值集合;
   2.HashSet属于Set接口

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
HashSet
                存储原理
                        每次存储对象的时候, 调用该对象的hashCode()方法得到哈希值, 在集合中查找是否有哈希值相同的对象.
                        如果没有哈希值相同的对象, 直接存入.
                        如果有哈希值相同的对象, 则和哈希值相同的对象进行equals()比较.
                        比较结果为false直接存入, 结果为true则不存.
                过滤属性相同元素
                        如果我们希望HashSet能够过滤属性重复的元素, 那么就需要重写hashCode()和equals().
                        属性相同的对象hashCode()方法要返回同一个哈希值, 属性相同的对象equals()方法要返回true.
                        为了提高效率, hashCode()方法在属性不同的时候尽量返回不同的哈希值.

HashMap (线程不安全,存取速度快,允许存放null键,null值。)
在每次存储键值对的时候, 调用Key对象的hashCode()方法计算一个哈希值. 在集合中查找是否有哈希值相同的Key对象.
                如果没有哈希值相同的Key对象就直接存入键值对.
                如果有哈希值相同的Key对象, 那么和这些相同的Key对象进行equals()比较.
                比较结果为false就直接存入, 比较结果为true则将Value对象覆盖.

Hashtable
线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
颜秉武 发表于 2011-12-10 13:16
HashSet
                存储原理
                        每次存储对象的时候, 调用该对象的hashCode()方法得到哈希值, 在集合中查找是否有哈 ...

多谢回复!解释的非常清楚,好理解!
回复 使用道具 举报
李明 发表于 2011-12-10 12:50
Hashtable:底层数据结构是哈希表,不能存null,线程同步。出现与jdk1.0版本,效率低
HashMap:底层数据结构 ...

非常感谢您的回复!
回复 使用道具 举报
李振元 黑马帝 2011-12-10 15:53:34
7#
侯伟浩 发表于 2011-12-10 12:57
HashMap、HashSet、Hashtable:
相同点
   1.都是不允许重复的集合;

多谢回复!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马