java - HashSet 中的 equals 方法

标签 java collections treeset

我正在尝试理解 TreeSet。我创建了 Employee 对象并尝试将其添加到 TreeSet 中。为了实现这一点,我创建了名为 sortName 的类,它根据名称对员工对象进行排序。我也写了一个 equals 方法(只是为了理解执行流程)。我读到,在 TreeSet 中,要在某些排序中添加元素,我们必须实现比较器接口(interface)并覆盖两个方法(比较和等于),当然 equals 是可选的。当我尝试运行它的程序时,我发现 equals 方法从未被调用,这是为什么?

我们来比较一下 HashSet 和 TreeSet。在HashSet中,当hashCode相同时,它检查equals方法,否则不检查。我有兴趣知道 TreeSet 是如何工作的? 谁能给我一个例子,其中甚至为 TreeSet 调用 equals 方法?

public int compare(Object Obj1, Object Obj2) {
    System.out.println("compare");
    if (Obj1 instanceof Employee19 && Obj2 instanceof Employee19) {
        Employee19 emp1=(Employee19) Obj1;
        Employee19 emp2=(Employee19) Obj2;

        return emp1.sname.compareTo(emp2.sname);
    }
    return 0;
}

public boolean equals(Object obj){
    System.out.println("equals");
    return true;
}

我什至检查了这个链接,但这不是我要找的...... HashSet with two equals object?

最佳答案

TreeSet不需要使用equals方法,因为它从 Comparator 获取所需的所有信息。的compare方法(或 compareTo 方法,如果它依赖于其元素 Comparable )。如果适当的方法返回0,则无论哪种方式都可以判断元素是否等效。 .

关于java - HashSet 中的 equals 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410163/

相关文章:

java - 使用 Java 8 从内部对象中查找实体列表中所有 ID 列表的方法

java: TreeSet顺序

java - 使用该 TreeSet 中的重复项并打印出重复项

java - 嵌套 JavaFX ExecutorService 关闭

java - 对于空列表中的每个循环

java - Java 中的回调与 lambda

java - 在 TreeSet 和 TreeMap 中使用 hashCode() 和 equals()

java - 我应该使用 Runtime.exec() 来调用 bash shell 脚本吗?

java - 如何检查一个 ArrayList 是否包含 2 个值?

Java 8 lambda 表达式 : Mapping a Stream to type Integer and then calling sum() won't compile