我正在阅读下面提供的cat output2.txt
this is test1
this is test2
this is test1
的代码,
Arrays.hashCode
我发现不清楚为什么选择public static int hashCode(Object a[]) {
if (a == null)
return 0;
int result = 1;
for (Object element : a)
result = 31 * result + (element == null ? 0 : element.hashCode());
return result;
}
进行哈希处理。
第二,31
将我送至定义它的element.hashCode()
类:
Object
对于每次迭代如何计算@HotSpotIntrinsicCandidate
public native int hashCode();
?
谢谢。
答案 0 :(得分:3)
摘自《 有效的Java》:
选择值31是因为它是奇数质数。如果是偶数且乘法运算溢出,则信息将丢失,因为乘以2等于移位。使用质数的优势尚不清楚,但这是传统的。 31的一个不错的特性是乘法可以用移位和减法来代替,以获得更好的性能:31 * i ==(i << 5)-i。现代VM会自动执行这种优化。