簡體   English   中英

如何在某些自然順序上對鏈表進行排序?

[英]How to sort linkedlist on some natural order?

我們有一個鏈表,這個鏈表的元素是Employee,我想根據Employee的工資對這個鏈表進行排序,工資是Employee Class的一個成員,我們可以使用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;
    }
}

您可以對鏈接列表進行排序,但這不是一種有效的操作,尤其是如果列表的大小不是很小的話。 選擇適當的數據結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM