重写equal之后为什么要重写hashcode

一:什么是equal和hashcode

在Java钟equals()和hashcode()方法通常是成对的,它们在使用都是基于hash机制的数据结构非常重要,类如hashmap、hashSet和hashtable等。

  • 根据Java的文档,如果两个对象通过equals(Object obj)方法比较是相等的,那么调用这两个对象中任一对象的hashCode()方法必须产生相同的整数结果。
  • 如果两个对象通过equals(Object obj)方法比较是不相等的,那么调用这两个对象的hashCode()方法不要求一定产生不同的整数结果。但是,为不相等的对象生成不同的哈希码可以提高哈希表的性能。

二、原因

为什么需要这样做?

  1. 提高集合框架的性能
    • 当你在使用基于哈希的集合(如HashSetHashMap)时,集合内部会根据元素的哈希码来确定元素在集合中的存储位置(桶)。
    • 如果不重写hashCode(),那么即使你重写了equals()HashSetHashMap等集合也可能无法正确地根据equals()的比较结果来区分对象,因为它们可能会基于对象的默认哈希码(通常是对象的内存地址)来比较和存储对象。
    • 这将导致即使两个对象通过equals()比较是相等的,它们也可能被存储在集合的不同位置,从而导致集合的行为不符合预期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值