Как отсортировать связанный список по естественному порядку? - PullRequest
4 голосов
/ 23 апреля 2011

У нас есть связанный список, элементы этого связанного списка: Сотрудник, я хочу отсортировать этот связанный список на основе зарплаты Сотрудника, зарплата является одним из членов класса Сотрудника, мы можем использовать Collections.sort ()?если нет, как я могу это отсортировать?Кто-нибудь может мне объяснить?

Ответы [ 4 ]

6 голосов
/ 23 апреля 2011

Да, вы можете использовать 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());

4 голосов
/ 23 апреля 2011

Хотя 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();
    }
});
0 голосов
/ 23 апреля 2011

Вы можете отсортировать связанный список, но это неэффективная операция, особенно если список не является тривиальным по размеру.Выберите подходящие структуры данных.

0 голосов
/ 23 апреля 2011

Вы можете использовать Collections.sort()

Но для этого вашему классу Employee необходимо сначала реализовать интерфейс Comparable .

Грубым примером будет:

public class Employee implements Comparable<Employee>
{
    public int compareTo(Employee e)
    {
        return this.salary - e.salary;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...