我正在尝试理解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?
答案 0 :(得分:4)
TreeSet
不需要使用equals
方法,因为它可以从Comparator
的{{1}}方法获取所需的所有信息(或{ {1}}方法,如果它依赖于compare
的元素。如果适当的方法返回compareTo
,则无论哪种方式都可以判断元素是否相等。