我遇到一个问题,我尝试删除的项目位于我的 HashSet 中,但 contains()
和remove()
返回假。但是,如果我编写一个简单的 for 循环:
HashSet<Node> myList;
myList.add(new Node("node"));
Node myNode = new Node("node");
for (Node n : myList){
if (n.equals(myNode)) System.out.println("Found Node in List");
}
我得到了预期的输出。如果我切换为 myNode.equals(n)
,它有效(等于对称)。
我在其他地方成功使用了 equals 方法(为 Node 编写),所以我知道它是有效的。
HashSet 是否使用指针或对象的其他参数进行比较?尽管不想要重复项,但使用 arrayList 并手动检查我是否没有添加重复项是否会更好?
最佳答案
您还没有显示足够的代码,但我敢打赌您在 Node
中的 hashCode()
实现不正确。
关于Java哈希集不删除它包含的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842402/