HashSet中的Equals方法

时间:2014-03-14 16:04:23

标签: java collections treeset

我正在尝试理解TreeSet。我创建了一个Employee对象并尝试将employee对象添加到TreeSet。为了实现这一点,我创建了一个名为sortName的类,它根据名称对员工对象进行排序。我也写了一个equals方法(只是为了理解执行流程)。我在TreeSet中读到要在某些已排序的元素中添加元素,我们必须实现比较器接口并覆盖两个方法(compare和equals)ofcourse 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?

1 个答案:

答案 0 :(得分:4)

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