hashcode会重复吗

pengjiani 1935

hashcode会重复。因为hashCode只是计算一次,保存在对象头中,就算用内存地址相关策略,也会因为垃圾回收等导致不同对象的内存地址一样,从而引发hashcode重复冲突。因此,hashcode会重复。

hashcode的作用

hashcode代表对象的地址说的是对象在hash表中的位置,物理地址说的对象存放在内存中的地址,那么对象如何得到hashcode呢?通过对象的内部地址(也就是物理地址)转换成一个整数,然后该整数通过hash函数的算法就得到了hashcode,所以,hashcode是什么呢?就是在hash表中对应的位置。这里如果还不是很清楚的话,举个例子,hash表中有 hashcode为1、hashcode为2、(…)3、4、5、6、7、8这样八个位置,有一个对象A,A的物理地址转换为一个整数17(这是假如),就通过直接取余算法,17%8=1,那么A的hashcode就为1,且A就在hash表中1的位置。

hashcode重复的原理

1.java中所有的对象都有一个父类Object,而Object类都有hashCode方法,也就是说java中所有的类均会有hashCode方法;

2.Object类的hashCode方法是native的,即是通用C语言来写的,本文举例使用的是String类,自己重写了hashCode方法,算法即如下:
String.hashCode()=str.charAt(0) * 31n-1 + str.charAt(1) * 31n-2 + … + str.charAt(n-1)

3.String类的hashCode算法是固定的,根据算法就可以看到是可能会存在相同hashCode的;

4.两个String的hashCode相同并不代表着equals比较时会相等,它们两者之间是没有必然关系,这一点可以看看equals方法的实现。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部