gpt4 book ai didi

java - 如何以二维int数组为key在HashMap中进行查找

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:37 24 4
gpt4 key购买 nike

我有很多二维整数数组(大小 8x8),每个数组都有一些基于计算的 double 值。我想将它们存储在数据结构中,这样我就能够查找二维数组并检查我之前为该数组赋予的值。

我一直在尝试使用二维数组的hashCode,但没有成功。我还尝试过使用数组作为键的 hashMap,并且尝试创建自定义对象作为键。但两者都不适合我,所以我做错了。在哪里可以找到解决方案?

最佳答案

由于 Java 数组不会覆盖 Object native 实现中的 hashCode()euqals(),因此它们并不真正适合查找。例如两个相同的数组不相等:

int[][] a1 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int[][] a2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
System.out.println(a1.hashCode()); // 1277181601
System.out.println(a2.hashCode()); // 41903949
System.out.println(a1.equals(a2)); // false

但是,我们可以创建一个内部使用 Arrays.deepHashCode()Arrays.deepEquals() 的包装类,如下所示:

public class IntIntArray {
private int[][] values;

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
IntIntArray that = (IntIntArray) o;
return Arrays.deepEquals(value, that.value);
}

@Override
public int hashCode() {
return Arrays.deepHashCode(value);
}
}

此类适用于基于值的查找,并且可以用作 Map 键:

IntIntArray i1 = new IntIntArray(new int[][] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}});
IntIntArray i2 = new IntIntArray(new int[][] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}});
System.out.println(i1.hashCode()); // 30729379
System.out.println(i2.hashCode()); // 30729379
System.out.println(i1.equals(i2)); // true

关于java - 如何以二维int数组为key在HashMap中进行查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54523982/

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