两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不对

首先要明白什么是hashCode以及hashCode的原理

hash是一个函数,他就是一个算法(有很多种)hashcode是对象通过hash函数得到值,根据这个值把对象放入hash表中的相应地址,注意这个地址是在hash表中的地址,不是对象的物理地址。那么hashcode是怎么得到的呢?hashcode是通过对象的内容比如说12,通过hash算法得到2这个数,而在hash表中有1,2,3,4,5,6,7,8这八个位置,那么这个对象在hash表中的地址就是2这个位置。当然这八个位置可以有很多值,比如说1这个位置里面有n个值。

那么hashcode有什么用呢?

HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的(后半句说的用hashcode来代表对象就是在hash表中的位置)

比如说要存100个不相同的值,那么每存一个值还要遍历一遍,很麻烦。所以用hash表,每存一个值都把这个值放入hash表中,假设当存到第99个值得时候,其hash为1,那么只要把第99个值和hash是1位置上的所有值比较就行了,这样很方便,也很快。

所以一般比较对象时先调用hashcode(缩小比较范围),然后在用equals对hash表中一个位置中的值进行对比。

所以

1、如果两个对象equals相等,那么这两个对象的HashCode一定也相同

2、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容