黑马程序员技术交流社区
标题:
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