hashCode和equals分析

hashCode()

hashCode():hashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列码,可以提高检索的效率,主要用于在散列存储结构中快速确定对象的存储地址

equals()

equasl():一般情况下重写后的equasl()是用来比较两个变量的内容是否相等,如果没有重写equals()方法的话,其作用和 == 是一样的,比较的是两个变量在内存中的地址。

相同之处

两者都是Object基类中的方法,两个方法都会被继承给所有的类。
hashCode是根据统一计算方式返回一个对象的hash码,常见的有取余算法等…,重写hashCode方法就是重写里面计算哈希码的方式或规则。

区别之处

1、hashCode方法的返回值是是int类型的哈希码,equals方法返回的是boolean型的值
2、hashCode是一个native修饰的方法,equals是一个Java方法

关联

1、当两个变量的hashCode返回的数值一样时,equals返回的不一定是true
2、当两个变量的equals方法返回true时,此时两个变量的hashCode返回的数据一定是一样的

经典案例

哈希碰撞:当map集合的key存储value值时会判断新存入的key是否在在map中存在哈希值一样的key值,如果存在hashCode一样的key值,此时会发生哈希碰撞。会根据equals方法判断两个key值内容是否一致,如果两个元素的key值的hashCode是一样的而equals返回值是不一样的这就是哈希碰撞。此时存入map的key对应的value值不会覆盖原本的值,而是一个新的元素。当hashCode存在一致的key值,且此key值与需要存入的key值的equals返回也为true,则该key对应的value会发生覆盖,将原本key对应的value值覆盖掉。

内容来源于网络,本人学习Java后工作之余整理出来,欢迎各位大佬查漏补缺

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值