如何使用Java 7+';Objects.hash()和#x27;使用数组?
我非常喜欢Java 7+的写作风格如何使用Java 7+';Objects.hash()和#x27;使用数组?,java,arrays,java-7,hashcode,Java,Arrays,Java 7,Hashcode,我非常喜欢Java 7+的写作风格hashCode()method: @Override public int hashCode() { Objects.hash(field1, field2); } 但它不能正确地处理数组。以下代码: @Override public int hashCode() { Objects.hash(field1, field2, array1, array2); } 对于array1和array2常规hashCode()而不是数组,将不起作用。
hashCode()
method:
@Override
public int hashCode() {
Objects.hash(field1, field2);
}
但它不能正确地处理数组。以下代码:
@Override
public int hashCode() {
Objects.hash(field1, field2, array1, array2);
}
对于array1
和array2
常规hashCode()
而不是数组,将不起作用。将调用hashCode()
如何正确地将Objects.hash()与数组一起使用?您可以尝试:
Objects.hash(field1, field2, Arrays.hashCode(array1), Arrays.hashCode(array2));
这与创建一个包含field1
、field2
、array1
和array2
内容的数组相同。然后在此数组上计算数组。hashCode
。将发现数组中的数组(通过instanceof Object[]
)并递归调用自身。
看
如果数组包含其他数组作为元素,则哈希代码将基于它们的内容,依此类推
使用类似于Objects.hash的params版本会很有用,但您必须编写自己的:
public final class HashUtils {
private HashUtils(){}
public static int deepHashCode(Object... fields) {
return Arrays.deepHashCode(fields);
}
}
用法:
@Override
public int hashCode() {
return HashUtils.deepHashCode(field1, field2, array1, array2);
}
您可能必须使用数组。deepHashCode
@LouisWasserman-您能详细说明为什么我需要使用深度哈希代码吗?
@Override
public int hashCode() {
return HashUtils.deepHashCode(field1, field2, array1, array2);
}