黑马程序员技术交流社区

标题: hashset中为什么equals方法不能判断元素唯一性 [打印本页]

作者: shi980088    时间: 2014-5-31 07:35
标题: hashset中为什么equals方法不能判断元素唯一性
hashset中为什么equals方法不能判断元素唯一性?为什么要先hashCode然后在equals?
作者: 凝霜的枯藤    时间: 2014-5-31 07:53
由于HashSet是按着Hash算法分组存储对象,所以每个对象都有一个HashCode值,属于某一个区域组
(比较对象时,也同时比较HashCode的值)就必须要重写hashCode(),同时参与hash运算的变量不能参与其他运算
作者: 饥渴ing    时间: 2014-5-31 12:38
equals是能够判断元素的唯一性的.hashCode 的常规协定中equals返回true两个对象hashCode值必须是一样的.所以true肯定是相同元素了.
当hashCode不同时可以直接跳过equals方法,比每次都比较equals方法快多了吧.
作者: shi980088    时间: 2014-5-31 13:07
饥渴ing 发表于 2014-5-31 12:38
equals是能够判断元素的唯一性的.hashCode 的常规协定中equals返回true两个对象hashCode值必须是一样的.所 ...

哦哦谢谢
作者: HJK    时间: 2014-6-13 23:50
当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象:如果没有哈希值相同的对象就直接存入集合;如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存。
比较原则:
hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储
作者: ╭月牙湾湾╮    时间: 2014-6-14 00:18
学习了。。。
作者: 安彦宇    时间: 2014-6-14 13:26
贱贱,有缘啦,在这里都能碰到




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2