我有一个名为 Employee 的类,它有employeeName
和employeeId
作为它的成员变量。我正在创建新的 Employee 对象,然后将它添加到TreeSet
我想根据employeeId
. 但我认为如果 2 个 Employee 对象相同,则它们是相等的employeeName
。Set 不允许重复。但是在这里我可以观察到一个奇怪的行为。这是我的代码。(我在这里没有使用 getter 和 setter。我直接访问成员变量。)
package secondOne;
import java.util.Set;
import java.util.TreeSet;
class Employee implements Comparable<Employee> {
String employeeName;
int employeeId;
public Employee(String name, int id) {
this.employeeName = name;
this.employeeId = id;
}
public int compareTo(Employee emp) {
//return this.employeeName.compareTo(emp.employeeName);
return (this.employeeId - emp.employeeId);
}
@Override
public String toString() {
return ("Name is: " + employeeName + " Emp id is: " + employeeId);
}
@Override
public boolean equals(Object emp) {
if (emp instanceof Employee && ((Employee) emp).employeeName == this.employeeName) {
return true;
}
return false;
}
}
public class TestingSetsWithComparable {
/**
* @param args
*/
public static void main(String[] args) {
Employee e1 = new Employee("A", 1);
Employee e2 = new Employee("A", 2);
Employee e3 = new Employee("B", 3);
Set<Employee> set = new TreeSet<Employee>();
set.add(e1);
set.add(e2);
set.add(e3);
System.out.println(set);
}
}
上面代码的输出是,
[Name is: A Emp id is: 1, Name is: A Emp id is: 2, Name is: B Emp id is: 3]
我的第一个问题是,在 equals() 方法中,如果两个 Employee 对象具有相同的 employeeName,我认为它们是相等的,但在 compareTo 方法中,我使用 employeeId 进行排序。在这种情况下,输出显示employeeName 'A' 的2 个条目。当我认为两个对象具有相同的employeeName 时,TreeSet 如何允许重复条目。这怎么可能..?第二个问题是,在 compareTo 方法中,如果我使用employeeName 进行排序,那么我不会得到相同名称的第二个重复条目。第二种情况的输出是
[Name is: A Emp id is: 1, Name is: B Emp id is: 3]
为什么会这样..?