我知道 HashSet.contains() 方法使用 .equals 方法来检查相等性,因为它检查指针以查看它们是否相等。
我需要它来检查指针处的实际对象是否相等 - 在我的特定情况下,我需要查看正在打开的“Node”(int[] 数组)是否已存在于 HashSet 中。这对于我的搜索算法至关重要,这样我的双向迭代深化搜索的实现就不会那么幼稚。
如果可能的话,我仍然希望线性搜索时间,或者也许我应该使用不同的类?
感谢您的帮助。
最佳答案
引用相等只是 .equals() 的默认实现。您可以将数组放入一个覆盖 equals 和 hashCode 的包装类中以检查内容。注意:为了使其发挥作用,将内容放入集合后内容不得更改。
import java.util.Arrays;
public class IntArrayNode {
private int[] array;
public IntArrayNode(int[] array) {
this.array = array;
}
//getter and setter
public boolean equals(Object obj) {
if (obj != null && obj instanceof IntArrayNode) {
return Arrays.equals(this.array, ((IntArrayNode) obj).array);
} else {
return false;
}
}
public int hashCode() {
return Arrays.hashCode(this.array);
}
}
关于java - Java 中的 HashSet - 比较和哈希键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9848004/