java - Java 中的 HashSet - 比较和哈希键

标签 java queue hashset

我知道 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/

相关文章:

java - 我想向这个 boolean 方法添加 "counter"

javascript - 如何管理 jquery 1.5 中的 ajax 请求队列?

c# - 消息队列思想

python - Python 中的线程/队列

java - 哈希集大小操作

java - 如何测试一个构造函数会抛出非法状态异常?

java - 没有配置文件的多个 src/main/resources 文件夹(我希望一次构建多个版本)

java - 在 select 语句上实现批处理

如果修改了包含的元素,则 Java HashSet 包含重复项

java - Java Collection Framework 中 Set 的基于哈希的实现?