Java哈希集不删除它包含的节点

标签 java hashset

我遇到一个问题,我尝试删除的项目位于我的 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/

相关文章:

java - 获取 JSON 并在 ListView 上显示,并使用数组适配器强制关闭

java - 格式化包含操作和数字的字符串

c# - 是否可以使用 linq 对一组值进行 GroupBy?

c# - HashSet 中的 Union 与 Unionwith

java - 为什么无法使用 For-Each 循环赋值? java

java - For Loop 打印正方形而不进行乘法

java - Maven 2 项目相互依赖

java - 数据结构等同于 hashset 但有这些变化?

java - 有没有在Java中实现NavigableSet的HashSet?

java - 如何在与Equal和hashcode一致的情况下实现compareTo()方法