Java:hashcode()与equals()相关

Java:hashcode与equals相关


Java中 == 在比较基础数据类型是判断值是否等,在判断引用类型时是判断实例地址。
而equals(),equals()客观上应该是对==的补充,我们可以在重写时加入自定义的相等判断的逻辑,比如String.equals(),当两个String引用指向同一实例或者两个不同实例但是内容一致时,都相等

再说哈希表,这个数据结构根据key值算出一个value值。
根据key算出value这个结果在Java中即为得到内存中的索引位置,而这个索引位置就是hashcode()

比如Java中的HashSet存储时,新加入的元素在hashcode()处已有存储,则出现冲突,这时实现原理上是使用equals对冲突处的所有元素判定,看新元素是否已在HashSet中。

所以对应于哈希表的设计初衷,

在Java中只要equals()的对象,其hashcode()应该是一样的(相同的key)

同理,不是equals()的对象也有可能hashcode()相同(不同的key可能得到相同的value)

因此,当我们重写了equals()时,也应确保hashcode()满足上面方框内的条件

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值