gpt4 book ai didi

Java Array HashCode 实现

转载 作者:IT老高 更新时间:2023-10-28 20:33:19 25 4
gpt4 key购买 nike

这很奇怪。一位同事询问了 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,也就是说hashcode依赖于引用。要根据数组的内容获取哈希码,请使用 Arrays.hashCode

请注意它是一个浅哈希码实现。还存在一个深度实现 Arrays.deepHashCode

关于Java Array HashCode 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com