【发布时间】:2014-05-01 16:02:54
【问题描述】:
我一直在浏览 Comparable vs Comparator 接口的实现示例。
但是,我在它的实施过程中遇到了一个问题:
假设,我有一个简单的类:Employee,它有一个基于员工姓名的默认排序机制。
public class Employee implements Comparable<Employee> {
private int empSalary;
private String empName;
@Override
public int compareTo(Employee e) {
return this.empName.compareTo(e.empName);
}
}
但是,比方说,我必须先根据员工姓名排序,然后如果两个员工姓名相同,我必须根据他们的薪水对他们进行排序。
所以,我写了一个自定义比较器来根据薪水进行排序,如下所示
public class SalaryComparator implements Comparator<Employee> {
@Override
public int compare(Employee e1, Employee e2) {
return e1.empSalary - e2.empSalary;
}
}
但是,当我运行我的测试类以首先根据姓名排序,其次是薪水时,输出与预期不符。
Collections.sort(employeeList, new SalaryComparator());
输入顺序:
Name : Kumar, Salary : 40
Name : Sanket, Salary : 10
Name : Kumar, Salary : 20
预期输出:
Name : Kumar, Salary : 20
Name : Kumar, Salary : 40
Name : Sanket, Salary : 10
实际输出:
Name : Sanket, Salary : 10 // incorrect order
Name : Kumar, Salary : 20
Name : Kumar, Salary : 40
【问题讨论】:
标签: java sorting collections comparator comparable