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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

hashset中为什么equals方法不能判断元素唯一性?为什么要先hashCode然后在equals?

6 个回复

倒序浏览
由于HashSet是按着Hash算法分组存储对象,所以每个对象都有一个HashCode值,属于某一个区域组
(比较对象时,也同时比较HashCode的值)就必须要重写hashCode(),同时参与hash运算的变量不能参与其他运算

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
equals是能够判断元素的唯一性的.hashCode 的常规协定中equals返回true两个对象hashCode值必须是一样的.所以true肯定是相同元素了.
当hashCode不同时可以直接跳过equals方法,比每次都比较equals方法快多了吧.
回复 使用道具 举报
饥渴ing 发表于 2014-5-31 12:38
equals是能够判断元素的唯一性的.hashCode 的常规协定中equals返回true两个对象hashCode值必须是一样的.所 ...

哦哦谢谢
回复 使用道具 举报
当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象:如果没有哈希值相同的对象就直接存入集合;如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存。
比较原则:
hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储
回复 使用道具 举报
学习了。。。
回复 使用道具 举报
贱贱,有缘啦,在这里都能碰到
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马