我正在尝试理解 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/