下面是list类hashcode方法内容,知道为什么hashcode要那么计算吗?

hashCode = 1;
Iterator i = list.iterator();
while (i.hasNext()) {
Object obj = i.next();
hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
}

1个回答

hashcode的算法不唯一,只要保证,相同的变量(equals返回true),hashcode肯定相等,不同的变量,可以相等,可以不等,但是尽量不等,这两个条件就可以了。
乘以31再加上后一位的hash,这个的目的就是尽量不等。

dongms_7
中不二 首先谢谢你的回答,我想知道“乘以31再加上后一位的hash”是如何保证不同变量结果不等的。就是他在数学上面的依据是什么?
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问