Java:hashcode()与equals()的联系

Java:hashcode与equals的联系

  • == :
    Java中 == 比较基础数据类型时是判断两个值是否相等,在判断引用类型时是判断两个引用变量是否指向同一个实列。
  • equals():
    该方法方法客观上应该是对 == 的补充,在类中override该方法可以加入自定义的判断的逻辑。
    如String.equals(),当两个字符串的长度和对应位置上的字符都相等时,则返回true。

再说哈希表,这个数据结构根据输入值key,算出一个输出值value。value在Java中就是hashcode()的返回值,可以理解为一个内存位置。
比如向HashSet中添加一个实例或者查询某个实例是否存在时,拿到目标元素的hashcode(),去对应内存位置查看,若没有内存占用,则表示该元素之前不存在在HashSet中。
若存在内存占用,则需要进一步检查,这时实现原理是使用equals()对冲突处的所有元素判定,看新元素是否已在HashSet中。

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

在Java中只要equals()的实例(理解为同一个key),其hashcode()应该是一样的
同理,不是equals()的实例也有可能hashcode()相同(不同的key可能得到相同的value)
因此,当重写了equals()时,也应确保hashcode()的一致性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值