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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿里策 中级黑马   /  2013-10-14 19:46  /  1731 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 阿里策 于 2013-10-15 18:18 编辑

    看到HashSet这一块,关于equals有点疑问,我们知道HashSet底层数据结构是哈希表,所以存放的时候,先查看存放元素的哈希值,如果hash地址值一样,再用equals比较看这两个对象到底是不是同一个对象。所以我有疑问:在Object超类中,equals方法比较的不就是通过比较哈希地址值来判断是不是同一个对象吗?现在哈希值都一样了怎么还能用equals比较这两个对象是不是同一个对象呢?还是只是方法的执行顺序问题????    求指教。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

4 个回复

倒序浏览
可以通过看HashSet存储元素唯一性的判断方法来解决这个问题、
        如果对象的hashCode值不同,那么不用再次判断对象的equals方法是否为true。
        如果对象的hashCode值相同,那么次再次判断对象的equals方法是否为true。
        如果为true,则视为相容元素,不存。如果为false,那么视为不同元素,就进行存储。
        如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。
       通常情况下,可以通过构造比较器的方法来实现对元素按照指定的顺序排序。




这样,在回过头来看楼主的问题,好像迎刃而解了。
回复 使用道具 举报
我来答吧,这部分在高新技术力会有专门的一集来讲这个问题,你要记住:equals比较相同的那哈希值一定相同,哈希值相同的equals不一定相同,原因是有的对象的哈希值可能会一致,想要了解的再详细你可以专门看那集
回复 使用道具 举报
equels比较的是对象的地址,但是==比较的也是,equals如果不重写的话跟==没有什么本质上的差别,一般都要重写。  重写equals需要满足的条件:
自反性:对任意x,x.equals(x)一定返回ture。
对称性:对任意x和y,如果x.equals(y)返回ture,那么y.equals(x)也返回ture。
传递性:
一致性:
对任意不是null的x,如果x.equals(null),一定返回false
回复 使用道具 举报
To 金牌黑马 2013-10-15 17:59:33
报纸
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马