当前位置: 首页 > 面试题库 >

HashSet包含方法,行为异常

卢德惠
2023-03-14
问题内容

这是我的代码:

public class testGui {



    public static void main(String[] arg){
        class TESTS{
            String t;

            public TESTS(String t){
                this.t = t;
            }

            @Override
            public boolean equals(Object x){
                System.out.println("My method is called...");
                if(x instanceof TESTS){
                    TESTS zzz = (TESTS) x;
                    return zzz.t.compareTo(t)==0;
                }
                else return false;
            }
        }
        HashSet<TESTS> allItems = new HashSet<TESTS>();
        allItems.add(new TESTS("a"));
        allItems.add(new TESTS("a"));
        System.out.println(allItems.contains(new TESTS("a")));
    }

}

我不明白为什么哈希集包含方法没有调用我的equals方法,如其规范中所述:

更正式地说,如果此集合中不包含任何元素e,则将指定元素o添加到该集合中,使得(o == null?e == null:o.equals(e))

我的代码返回了false,并且没有进入我的equals方法。

非常感谢您的回答!


问题答案:

覆盖时equals,还必须覆盖hashCode。否则,相等的对象将具有不同的哈希码,并被视为不相等。

强烈建议不要 覆盖hashCode。但这不是必需的,因为不相等的对象可以具有相同的哈希码。



 类似资料:
  • 问题内容: 在处理大量数据时,我经常发现自己在做以下事情: 类似于“倾销”列表中的集合内容。我通常这样做是因为添加的元素通常包含要删除的重复项,这似乎是删除它们的一种简便方法。 考虑到这个目标(避免重复),我也可以这样写: 因此,无需将集“转储”到列表中。但是,在插入每个元素之前,我会做一个小检查(我假设HashSet也是如此) 这两种可能性中的任何一种是否明显更有效? 问题答案: 集合将提供更好

  • 问题内容: 我执行了以下代码,发现输出为。 我想知道它的行为以及为什么输出是。 问题答案: 您还需要覆盖方法。这两种方法都用于适当的功能,因此必须被覆盖在 用户定义的类 ,如果你制作的作为,其他的类习惯并没有两个不同的可被视为与它们的将永远是不同的,并且肯定会在情况下总是返回。

  • 我一直在研究递归,并试图解决背包问题[https://en.wikipedia.org/wiki/Knapsack_problem]。我想出了下面的算法,它工作得很好: 这里奇怪的是,只有当调用初始函数的重量为,并且时,才会出现这种行为。 谢谢, D_Darric

  • 我试图打印包含,但是,HashSet没有检测到整数[]值。这和它被引用有关系吗?如果我不想将实际的整数[]对象传递给方法的参数,我如何克服这个问题?

  • 问题内容: 假设您有一个类,并创建了一个HashSet来存储此类的实例。如果尝试添加相等的实例,则集合中仅保留一个实例,这很好。 但是,如果HashSet中有两个不同的实例,并采用一个实例并使其与另一个实例完全相同(通过复制字段),则HashSet将包含两个重复的实例。 这是演示此代码的代码: 上面代码的输出: 有没有一种方法可以强制HashSet验证其内容,以便删除在上述情况下创建的可能重复条目

  • 问题内容: 有没有类似于Go中的方法的东西,而不必搜索切片中的每个元素? 问题答案: Mostafa已经指出,编写这种方法很简单,而mkb为您提供了使用sort包中的二进制搜索的提示。但是,如果要进行很多此类包含检查,则还可以考虑使用地图。 使用惯用语检查特定的映射键是否存在很简单。由于您对值不感兴趣,因此也可以创建一个例如。在此处使用空值的优点是不需要任何额外的空间,并且Go的内部映射类型针对该