Arrays.hashCode如何实现?

时间:2019-03-02 08:18:17

标签: java hash

我正在阅读下面提供的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();

谢谢。

1 个答案:

答案 0 :(得分:3)

摘自《 有效的Java》:

  

选择值31是因为它是奇数质数。如果是偶数且乘法运算溢出,则信息将丢失,因为乘以2等于移位。使用质数的优势尚不清楚,但这是传统的。 31的一个不错的特性是乘法可以用移位和减法来代替,以获得更好的性能:31 * i ==(i << 5)-i。现代VM会自动执行这种优化。