hashcode,equals的区别

本文探讨了hashCode()与equals()在Java中的区别。不重写时,两者比较对象地址;重写后,equals关注对象内容,hashCode通过散列算法计算。为保证HashSet存储唯一性,需重写这两个方法。通过先比较hashCode,再用equals细化比较,能提高效率。正确实现这两个方法对于集合唯一性验证至关重要。
摘要由CSDN通过智能技术生成

hashCode()与equals()的区别

相同点

同属于 Object 类

重写与不重写的区别
  • 不重写:
    hashCode():属于Native本地方法,返回的是对象的堆中地址值
    equals():比较两个对象地址值是否相等
  • 重写:
    hashCode():返回值是经过散列值算法将对象计算得出一个整数
    equals():比较两个对象的信息内容是否相等
重写 hashCode() 结果比较和 equals() 比较的结果是否相等
  • 重写后的equals仅对信息内容进行比较相等,那么hashCode计算的结果比较一定相等,equals绝对可靠
  • 重写后的hashCode经过算法得出散列值进行比较相等,那么equals比较有可能不一定相等,不相同内容的值经过散列算法的值可能一致,所以hashCode()不是绝对可靠的
保证唯一性的同时,如何保证高的效率

equals() 属于细粒度比较,将对象内容逐一比较,当对象成员内容多时,可先进行hashCode() 将对象计算出散列值继续粗粒度比较,如果散列值相等,再继续 equals() 细粒度内容逐一对比,可以提高效率.

HashSet集合存储元素如何保证唯一性

需要集合存储的对象类必须重写 hashCode() 和 equals 方法

  • 唯一效验的细节划分
    先比较地址值➡比较HashCode➡equals比较
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值