java - 计算多维数组的哈希码时使用 Arrays.deepHashCode() 的技术原因

标签 java arrays hashcode

我读过要计算多维数组的哈希码,必须使用 Arrays.deepHashCode() 方法而不是 Arrays.hashCode() 方法,但是我不太了解其背后的技术原因。有人可以给我解释一下吗?

    Object[][] one = {
        {1, 2, 3},
        {11, 22, 33}
    };
    int two = Arrays.deepHashCode(one);
    int three = Arrays.hashCode(one);
    System.out.println("two " + two);
    System.out.println("three " + three);

结果:

two 997365
three 312355675

最佳答案

技术上的原因是,如果您只是简单地在数组上调用hashCode(),您将获得一个“身份”哈希码;即忽略存储在数组中的值的哈希码。因此

Object[][] one = {
    {1, 2, 3},
    {11, 22, 33}
};

Object[][] won = {
    {1, 2, 3},
    {11, 22, 33}
};

println(won.hashCode() == one.hashCode());

将打印 false。在典型情况下,您会希望 onewon 的哈希码相等。为此,您需要计算哈希码以包括所有数组元素的值。

关于java - 计算多维数组的哈希码时使用 Arrays.deepHashCode() 的技术原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36385420/

相关文章:

javascript - html 表单值到 javascript 数组

Scala 设置哈希码

php - 方法适用于 C++,但如何在 PHP 中重现相同的方法?

java - 基于子类的哈希码?

Eclipse 中的 Java Socket 聊天

java - 无法为应用引擎项目创建谷歌凭据

java - 尝试从 JSONArray 中检索 JSONObject 时返回 null?

java - 如何在Web Service Rest中获取数组JSON?

java - 如何在注入(inject) JAX-RS 网络服务的 CDI bean 中获取 HTTP 请求 header ?

java - 通过外部服务丰富 Keycloak token 的正确方法