Mic*_*das 10 java arrays hashcode java-7
我非常喜欢Java 7+写作hashCode()方式:
@Override
public int hashCode() {
Objects.hash(field1, field2);
}
Run Code Online (Sandbox Code Playgroud)
但它无法正常使用数组.以下代码:
@Override
public int hashCode() {
Objects.hash(field1, field2, array1, array2);
}
Run Code Online (Sandbox Code Playgroud)
将不会工作,因为array1和array2常规hashCode()而不是Arrays.hashCode()被调用.
如何Objects.hash()以正确的方式使用数组?
你可以尝试:
Objects.hash(field1, field2, Arrays.hashCode(array1), Arrays.hashCode(array2));
Run Code Online (Sandbox Code Playgroud)
这是相同的创建包含一个阵列field1,field2,的内容array1和内容array2.然后计算Arrays.hashCode这个数组.
Arrays.deepHashCode将发现数组中的数组(via instanceof Object[])并递归调用自身.看代码.
如果数组包含其他数组作为元素,则哈希代码基于其内容等等,无限制地.
@Override
public int hashCode() {
Object[] fields = {field1, field2, array1, array2};
return Arrays.deepHashCode(fields);
}
Run Code Online (Sandbox Code Playgroud)
有一个params版本会很有用Objects.hash,但是你必须自己编写:
public final class HashUtils {
private HashUtils(){}
public static int deepHashCode(Object... fields) {
return Arrays.deepHashCode(fields);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
@Override
public int hashCode() {
return HashUtils.deepHashCode(field1, field2, array1, array2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1560 次 |
| 最近记录: |