我们有一个链表,这个链表的元素是员工(Employee),我想根据员工的薪水对这个链表进行排序,薪水是Employee类的一个成员,我们可以使用Collections.sort()吗?如果不能,该怎么办呢?
是的,你可以使用 Collections.sort()
你需要让你的Employee
类实现Comparable
接口。
http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html
在你的compareTo()
方法中,你应该比较当前对象的薪水和传入对象的薪水。
编辑:
如果你不想让这成为默认的比较方法,你还有另一个选择,那就是创建一个Comparator
对象并使用第二个形式 -> Collections.sort(List, Comparator);
它会像这样:
class SalaryComparator implements Comparator<Employee>
{
public int compare(Employee e1, Employee e2)
{
if (e1.getSalary() > e2.getSalary())
return 1;
else if (e1.getSalary() < e2.getSalary())
return -1;
else
return 0;
}
}
现在您可以执行:Collections.sort(myEmployeeList, new SalaryComparator());
虽然 LinkedList<Employee>
可以工作,但我会使用 ArrayList<Employee>
:
List<Employee> employees = new ArrayList<Employee>();
在您填充数据(无论哪种方式)后,可以按薪资排序,如下所示:
Collections.sort(employees, new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
return e1.getSalary() - e2.getSalary();
}
});
你可以使用 Collections.sort()
但是为了做到这一点,你的 Employee 类需要先实现 Comparable 接口。
一个简单的例子如下:
public class Employee implements Comparable<Employee>
{
public int compareTo(Employee e)
{
return this.salary - e.salary;
}
}
Collections.sort()
的javadoc中。 - Brian Roach你可以对链表进行排序,但这不是一种高效的操作,特别是当链表的大小不是微不足道的时候。选择适当的数据结构。
Collection
中的元素必须实现Comparable
接口,然后无论你将它们放在哪个Collection
中,都可以使用Collections.sort()
进行排序。sort()
方法将使用实现Comparable
接口所保证的compareTo()
方法。 - Daniel DiPaolo