判断Set,Map集合内容是否相等时,是先判断HashCode是否相等,还是先判断equlas是否相等?

sinat_38412163 2017-04-25 02:56:44
http://blog.csdn.net/xad707348125/article/details/45627035?locationNum=3&fps=1
比较HashCode值不就是为了提升效率减少使用equlas()的次数吗,为什么上面这篇文章里说先 :是先判断equals是否相等,如果equals返回TRUE,还要再判断HashCode返回值是否ture 。
...全文
253 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38380745 2017-04-25
  • 打赏
  • 举报
回复
Set的实现类HashSet(Map的实现类HashMap )只有在 hashCode 返回值冲突的时 候才会调用 equals 方法进行判断。也就是说,两个对象,如果 hashCode 没有冲突,HashSet(HashMap) 就不会调用 equals 方法判断而直接认为这两个对象是不同的对象。 所以: 1. 覆盖 equals 方法。要求相同的对象,调用 equals 方法返回 true。 2. 覆盖 hashCode 方法。要求,相同对象的 hashCode 相同,不同对象的 hashCode 尽量不同。
_jant 2017-04-25
  • 打赏
  • 举报
回复

public class Test {

    public static void main(String[] args) {
        Map<A,Object> map = new HashMap<A, Object>();
        map.put(new A(), new Object());
        map.put(new A(), new Object());

        System.out.println(map.size());
    }

}

class A {

    @Override
    public boolean equals(Object obj) {
        System.out.println("判断equals");
        return true;
    }

    @Override
    public int hashCode() {
        System.out.println("判断hashcode");
        return 1;
    }
}

测试结果:
判断hashcode
判断hashcode
判断equals
1
Scaarf 2017-04-25
  • 打赏
  • 举报
回复
这个倒没想过哎,同问,坐等大神回答,我也觉得应该是先比较hashCode

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧