Java数组HashCode实现

这很奇怪。一位同事询问了java中myArray.hashCode()的实现。我以为我知道,但是后来我进行了一些测试。检查下面的代码。我注意到的奇怪想法是,当我编写第一个系统时,结果是不同的。请注意,这几乎就像报告内存地址并修改类一样,将地址或其他内容移动了。只是想我会分享。

int[] foo = new int[100000];

java.util.Random rand = new java.util.Random();

for(int a = 0; a < foo.length; a++) foo[a] = rand.nextInt();

int[] bar = new int[100000];

int[] baz = new int[100000];

int[] bax = new int[100000];

for(int a = 0; a < foo.length; a++) bar[a] = baz[a] = bax[a] = foo[a];

System.out.println(foo.hashCode() + " ----- " + bar.hashCode() + " ----- " + baz.hashCode() + " ----- " + bax.hashCode());

// returns 4097744 ----- 328041 ----- 2083945 ----- 2438296

// Consistently unless you modify the class. Very weird

// Before adding the comments below it returned this:

// 4177328 ----- 4097744 ----- 328041 ----- 2083945

System.out.println("Equal ?? " +

(java.util.Arrays.equals(foo, bar) && java.util.Arrays.equals(bar, baz) &&

java.util.Arrays.equals(baz, bax) && java.util.Arrays.equals(foo, bax)));

回答:

java.lang.Array hashCode方法继承自Object,这意味着哈希码取决于引用。要基于数组的内容获取哈希码,请使用Arrays.hashCode

请注意,尽管它是一个浅哈希码实现。一个深层的实现也存在Arrays.deepHashCode

以上是 Java数组HashCode实现 的全部内容, 来源链接: utcz.com/qa/429030.html

回到顶部