【发布时间】:2014-03-14 16:04:22
【问题描述】:
我正在尝试理解 TreeSet。我创建了一个员工对象并尝试将员工对象添加到 TreeSet。为了实现这一点,我创建了一个名为 sortName 的类,它根据名称对员工对象进行排序。我也写了一个equals方法(只是为了理解执行流程)。我在 TreeSet 中读到要在某些排序中添加元素,我们必须实现比较器接口并覆盖两个方法(比较和等于)当然等于是可选的。当我尝试运行它工作的程序时,我观察到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()方法,而是使用compareTo方法或compare()方法,无论哪个都适用。 -
我试过它不工作..
标签: java collections treeset