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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王安琪 中级黑马   /  2013-6-7 17:17  /  2026 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王安琪 于 2013-6-12 22:09 编辑

如果哈希值相同,还是同一对象,那么是将该相同的对象顺延存储还是不再存入?
这里搞不清楚了???

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览
HashSet在存元素时,会调用对象的hashCode方法计算出存储位置,然后和该位置上所有的元素进行equals比较,
如果该位置没有其他元素或者比较的结果都为false就存进去,否则就不存。
这样的原理注定了元素是按照哈希值来找存储位置,所有无序,而且可以保证无重复元素
我们在往HashSet集合存储元素时,对象应该正确重写Object类的hashCode和equals方法
正因为这样的原理,HashSet集合是非常高效的。
比如,要查找集合中是否包含某个对象,首先计算对象的hashCode,折算出位置号,到该位置上去找就可以了,而不用和所有的元素都比较一遍

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 王安琪 于 2013-6-7 22:59 编辑
夏一站 发表于 2013-6-7 17:22
HashSet在存元素时,会调用对象的hashCode方法计算出存储位置,然后和该位置上所有的元素进行equals比较,  ...

那 哈希值相同,又是同一对象就在上一个对象的下面 顺延存储起来 是怎么回事呀???
毕老师的视频 讲的同一个对象顺延存储,就像下图示意的:


回复 使用道具 举报
你上面的那位同学说的相当的清楚啊。向HashSet集合中添加一个对象,先要调用这个对象的hashCode()方法(继承自Object类)计算出在集合HashSet中的存储位置,如果这个位置已经存储了对象,那就调用这个对象的equals方法判断这两个对象的成员变量是否相同,相同就不会把这个对象存储进去,不相同就就在已存储的对象下面存储起来。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
王安琪 发表于 2013-6-7 22:53
那 哈希值相同,又是同一对象就在上一个对象的下面 顺延存储起来 是怎么回事呀???
毕老师的视频 讲的同 ...

图很牛
回复 使用道具 举报
楼主你好  如果问题已经解决  请把帖子的类型改为已解决  然后会给你发几个粽子吃
回复 使用道具 举报
袁梦希 发表于 2013-6-12 18:53
楼主你好  如果问题已经解决  请把帖子的类型改为已解决  然后会给你发几个粽子吃 ...

真有粽子吃呀,,哈哈:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马