我们有一个链表,这个链表的元素是Employee,我想根据Employee的工资对这个链表进行排序,工资是Employee Class的一个成员,我们可以使用Collections.sort()吗?如果没有,我该如何排序呢? 任何人都可以解释一下吗?
答案 0 :(得分:6)
是的,您可以使用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());
答案 1 :(得分:4)
虽然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();
}
});
答案 2 :(得分:0)
您可以使用Collections.sort()
但是为了做到这一点,你的Employee类需要首先实现Comparable接口。
一个粗略的例子是:
public class Employee implements Comparable<Employee>
{
public int compareTo(Employee e)
{
return this.salary - e.salary;
}
}
答案 3 :(得分:0)
您可以对链接列表进行排序,但这不是一种有效的操作,尤其是如果列表的大小不是很小的话。选择适当的数据结构。