Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带字节数组的deepHashCode_Java_Arrays_Hashcode - Fatal编程技术网

Java 带字节数组的deepHashCode

Java 带字节数组的deepHashCode,java,arrays,hashcode,Java,Arrays,Hashcode,由于某些原因,Arrays.deepHashCode()无法使用字节[] 还有其他等价物吗?首先,不需要“深”。这是原始的。你不需要太深 只用 编辑:为了澄清,Deep意味着深入研究数组中包含的对象。假设您正在处理一个基元,您只需要在计算中使用基元值本身。这就是为什么没有一个Deep方法是围绕原语运行的。使用deepHashCode确实是正确的。如果您希望包含相同字节的两个字节数组具有等效的哈希代码,您只需要对byte[]数组进行一些额外的强制转换 import java.utils.Array

由于某些原因,
Arrays.deepHashCode()
无法使用
字节[]

还有其他等价物吗?

首先,不需要“深”。这是原始的。你不需要太深

只用


编辑:为了澄清,Deep意味着深入研究数组中包含的对象。假设您正在处理一个基元,您只需要在计算中使用基元值本身。这就是为什么没有一个Deep方法是围绕原语运行的。

使用deepHashCode确实是正确的。如果您希望包含相同字节的两个字节数组具有等效的哈希代码,您只需要对byte[]数组进行一些额外的强制转换

import java.utils.Arrays;

public class A {
  public static void main(String[] args) {
    byte[] a = {10,32,-43,80};
    byte[] b = {13,-40};
    byte[] c = {10,32,-43,80};
    // A and C will have different hash codes
    System.out.println(a.hashCode());
    System.out.println(b.hashCode());
    System.out.println(c.hashCode());
    // A and C will now have equivalent hash codes
    System.out.println(Arrays.deepHashCode(new Object[]{a}));
    System.out.println(Arrays.deepHashCode(new Object[]{b}));
    System.out.println(Arrays.deepHashCode(new Object[]{c}));
  }
}
这导致输出类似于

// Hash Codes
a = 16130931
b = 26315233
c = 32716405
// Deep hash codes
a = 1250961
b = 1355
c = 1250961

公认的答案是正确的:使用数组。hashCode为具有相同值的字节[]提供相同的结果。 数组。如果您有嵌套(深层)结构,则需要deepHashCode

import java.util.Arrays;

public class A {

    public static void main(String[] args) {
        byte[] a = {10, 32, -43, 80};
        byte[] b = {13, -40};
        byte[] c = {10, 32, -43, 80};

        System.out.println("NOTE: A and C have identical values, B differs");
        System.out.println("Using byte[].hashCode(): A and C have different hash codes");
        System.out.println("a = " + a.hashCode());
        System.out.println("b = " + b.hashCode());
        System.out.println("c = " + c.hashCode());

        System.out.println("Using Arrays.hashCode(): A and C have identical hash codes");
        System.out.println("a = " + Arrays.hashCode(a));
        System.out.println("b = " + Arrays.hashCode(b));
        System.out.println("c = " + Arrays.hashCode(c));

        System.out.println("Using Arrays.deepHashCode(): A and C have identical hash codes");
        System.out.println("a = " + Arrays.deepHashCode(new Object[]{a}));
        System.out.println("b = " + Arrays.deepHashCode(new Object[]{b}));
        System.out.println("c = " + Arrays.deepHashCode(new Object[]{c}));
    }
}
这将导致输出:

NOTE: A and C have identical values, B differs
Using byte[].hashCode(): A and C have different hash codes
a = 141847843
b = 329849131
c = 1119051810
Using Arrays.hashCode(): A and C have identical hash codes
a = 1250930
b = 1324
c = 1250930
Using Arrays.deepHashCode(): A and C have identical hash codes
a = 1250961
b = 1355
c = 1250961
下面是一个when数组的示例。deepHashCode是必需的

import java.util.Arrays;

public class B {
    public static void main(String[] args) {
        Object[] d = {"abc", "def", new String[]{"ghi"}};
        Object[] e = {"abc", "def", new String[]{"ghi"}};

        System.out.println("NOTE: D and E have identical nested values");
        System.out.println("Using Object[].hashCode(): different");
        System.out.println("d = " + d.hashCode());
        System.out.println("f = " + e.hashCode());

        System.out.println("Using Arrays.hashCode(): still different");
        System.out.println("d = " + Arrays.hashCode(d));
        System.out.println("e = " + Arrays.hashCode(e));

        System.out.println("Using Arrays.deepHashCode(): identical");
        System.out.println("d = " + Arrays.deepHashCode(d));
        System.out.println("e = " + Arrays.deepHashCode(e));
    }
}
输出:

NOTE: D and E have identical nested values
Using Object[].hashCode(): different
d = 241990244
f = 1943487137
Using Arrays.hashCode(): still different
d = 1057745997
e = 709187068
Using Arrays.deepHashCode(): identical
d = 95807651
e = 95807651

我假设您在
java.util.Arrays
中引用了
deepHashCode()
,注意:对于任何好奇的人,我在一个单独的答案中为嵌套数组添加了一个deepHashCode示例,这是一种非常好的方法,可以在您的答案=)中为基本数组添加可运行代码;但是,Arrays.hashCode比Arrays.deepHashCode更合适。我修改了您的代码,并添加了一个单独的答案,该答案表明它仍然为给定的输入提供相同的哈希代码,以及当两者不同时的示例。