解析hashCode为什么要和equles一块存在

hashCode是比较Hash值而equles默认是比较地址。hashCode相同equles不一定相同,但是为什么两者要一块存在呢?经过笔者通过查找资料最后得出一些结论:

1、hash的存在是为了更快的对比两个数的值,如果hash不同那么就没必要对比后面的值了,因为hash是事先生成好了,所以速度是比较快的。
2、在没有重写hash和equals的情况下,hash不相同,两个对象就一定不同,hash相同两个对象不一定相同,equals相同hash一定相同。

HashMap在存储元素的时候首先会计算哈希值,一个哈希值在一个数组中占一个位置,如果哈希值相同,会再去调用equals,如果结果为True,那么说明是两个相同的元素,不能存入(set去重)。如果为false,说明虽然哈希值相同,但两个元素不一样,比如:“张三”和“李四”,二者哈希值相同,但是内容不同

3、如果遇到了所谓的‘哈希碰撞’那么就需要使用equals进行比较了。
4、基于以上两点,我们知道如果要是重写了equals,那么就必须要重写hash。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值