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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 anywayDo 于 2015-5-4 22:55 编辑

一个类要实现Comparable接口,复写compareTo方法,这个很好理解,让对象具备比较性,在往TreeSet集合中存的时候,具有自然顺序。可是往hashset中存的时候,不都是一个对象一个对象往里添加么,那地址值一定不同呀,为什么还要复写那两个方法?说是可以保证存入对象的唯一性,可是我是觉得不复写,也可以实现,求大神解答。。

11 个回复

倒序浏览
hashset里面两个对象重复意味着这两个对象的内容相同、hashcode值也相同。

(1)两个对象A和B内容相同,表示A.equals(B)的值为true。

(不重写的话,默认equals()方法是调用”=="进行判断的,”=="判断的是两个对象的引用是否相同)

(2)如果你不重写hashCode()方法的话,两个对象的hashcode值在默认情况下是不可能相同的。
但是实际上还是会出现hash值相同,但是内容不同的情况,这是由于hash值计算方法的问题,就好比10可以等于5+5,也可以等于3+7,或者4+6;因此,为了避免这种情况,一般都要重写hashCode方法,当然内容相同,hash值必须相同,因此,在重写equals方法时候,就一定要重写hashCode方法,也就是不管哪种情况,两个方法都要重写
回复 使用道具 举报 2 0
楼上解释的详细...
回复 使用道具 举报
殷俊 发表于 2015-5-4 19:12
hashset里面两个对象重复意味着这两个对象的内容相同、hashcode值也相同。

(1)两个对象A和B内容相同,表 ...

良心答主呀。。我的疑问就在于hashCode的实现方法,因为我不知道为什么哈希值会出现一样的情况。。答案很详细,非常感谢。。
回复 使用道具 举报
zhiweiqi 发表于 2015-5-4 19:17
楼上解释的详细...

是呀,分析的很好,条理很棒 ,要向答主学习。。
回复 使用道具 举报
学习了!!
回复 使用道具 举报
学习了.
回复 使用道具 举报
anywayDo 发表于 2015-5-4 22:48
良心答主呀。。我的疑问就在于hashCode的实现方法,因为我不知道为什么哈希值会出现一样的情况。。答案很 ...

很有可能相同的,因为哈希值的计算是根据你的对象来,假设 有可能是你的年龄与名字有一些赋值的公式,很巧的是你的某两个对象里的四个变量数值不一样,但是,带入公式后,计算结果可能是一样。那么,java认为你的两个对象是重复的,set集合就不存了。那你不疯了嘛,所以你自己定义哈希值的计算,方可确保万无一失。。。。。
回复 使用道具 举报
ninjaes 发表于 2015-5-5 09:01
很有可能相同的,因为哈希值的计算是根据你的对象来,假设 有可能是你的年龄与名字有一些赋值的公式,很 ...

恩恩。。get。。:lol
回复 使用道具 举报

共同进步。。
回复 使用道具 举报
学习了。
回复 使用道具 举报

互相学习,多请教,多交流哈。。:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马