如何在某些自然顺序上对链表进行排序?

时间:2011-04-22 20:21:31

标签: java sorting

我们有一个链表,这个链表的元素是Employee,我想根据Employee的工资对这个链表进行排序,工资是Employee Class的一个成员,我们可以使用Collections.sort()吗?如果没有,我该如何排序呢? 任何人都可以解释一下吗?

4 个答案:

答案 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)

您可以对链接列表进行排序,但这不是一种有效的操作,尤其是如果列表的大小不是很小的话。选择适当的数据结构。