hashCode方法及equals方法的规范

本文系转载,原文地址:hashCode方法及equals方法的规范

在Java中,hashCode方法和equals方法都是java.lang.Object类的方法,在 The Java Language Specification, Java SE 8 Edition 中定义如下:

  • The method equals defines a notion of object equality, which is based on value, not reference, comparison.

  • The method hashCode is very useful, together with the method equals , in hashtables such as java.util.HashMap .

简而言之,equals法是判断两个对象是否等价的方法,而hashCode则是为散列数据结构服务的计算散列值的方法

equals方法

  • 自反性(Reflexive):一个对象与自身相等,即x=x。对任何非空对象x, x.equals(x)必定为true。

  • 对称性(Symmetric):对象之间的等价关系是可交换的,即a=b⇔b=a。对任何非空对象x、y, x.equals(y)为true,当且仅当y.equals(x)为true。

  • 传递性(Transitive):(a=b)∧(b=c)⇒(a=c)。对任何非空对象x、y、z, 若x.equals(y)为true且y.equals(z)为true,则x.equals(z)为true。

除了遵循这三原则之外,还要遵循:

  • 一致性(Consistent):对任何非空对象x、y,只要所比较的信息未变,则连续调用x.equals(y)总是得到一致的结果。这要求了equals所依赖的值必须是可靠的。

  • 对任何非空对象x, x.equals(null)必定为false。

hashCode方法

如果重写了equals方法,则一定要重写hashCode方法。

重写hashCode方法的原则如下:

  • 在程序执行期间,只要equals方法的比较操作用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法必须始终如一地返回同一个整数。

  • 如果两个对象通过equals方法比较得到的结果是相等的,那么对这两个对象进行hashCode得到的值应该相同。

  • 两个不同的对象,hashCode的结果可能是相同的,这就是哈希表中的冲突。为了保证哈希表的效率,哈希算法应尽可能的避免冲突。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值