搞懂为什么重写equals还要重写hashcode(个人自述)

1.hashCode
首先,hashCode的英文翻译就是散列码,它使用一个int值来代表对象。
我们可以使用System.identityHashCode(Objectx)方法返回默认的hashcode,无论你创建的对象是否覆盖磨人的hashCode。
hashCode方法主要是用于HashMap这样的哈希表,差不多就是全部的哈希表。
我们的哈希链表也可以叫做哈系桶,默认有16个槽位,长度为15,位置的判定主要是依靠除数和求余,更快地操作是用机器码即2的N次方,20-2^4=4。
2.equals
hashCode并不需要唯一性,但equals必须严格判断两个是否相同
以下是equals方法有如下特性:
|自反性|对称性|传递性|一致性|null|
x.equals(x)一定返回true
如果x.equals(y)=true;so y.equals(x)=true
x=y,y=z=>z=x
x and y 中介值没有改变,那么无论如何调用都不会改变
任何不是null的x,x.equals(null)一定返回false
equalsandhashcode的规定

  1. equals相等,hashcode一定相等。
  2. equals不等,hashcode不一定不等。
  3. hashcode不等,equals一定不等。
  4. hashcode相等,equals不一定相等。
    因此,如果我们重写了equals,那么必须重写hashCode,使其满足这些规定。当然,如果我们不把自定义对象当成HashMap的键来使用,那么自定义对象不重写equals和hashCode也是可以的。
posted @   吕伟昊  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示