Как работает comparator в java?

Пользователь

от vladimir , в категории: Java , 2 месяца назад

Как работает comparator в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jeremy_larkin , 25 дней назад

@vladimir 

Comparator в Java используется для сравнения объектов и определения их относительного порядка. Он позволяет установить пользовательский порядок сортировки, который может быть отличным от естественного порядка.


Comparator представляет собой функциональный интерфейс, определенный в пакете java.util. Он имеет метод compare(), который принимает два объекта в качестве параметров и возвращает отрицательное значение, ноль или положительное значение в зависимости от того, какой объект должен быть расположен первым в отсортированной последовательности. Если compare() возвращает отрицательное значение, то первый объект должен быть расположен перед вторым объектом. Если compare() возвращает ноль, то порядок объектов не имеет значения. Если compare() возвращает положительное значение, то первый объект должен быть расположен после второго объекта.


Когда нужно сортировать объекты, у которых нет встроенной поддержки сравнения, используется Comparator. Для этого создается класс, который реализует интерфейс Comparator и переопределяет метод compare(), чтобы определить необходимый порядок сортировки. Затем объект класса Comparator передается в метод сортировки, такой как Collections.sort() или Arrays.sort(), для выполнения сортировки.


Вот пример использования Comparator для сортировки списка объектов Person по возрасту:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 25));
        people.add(new Person("Bob", 30));
        people.add(new Person("Charlie", 20));

        // Создание компаратора для сортировки по возрасту
        Comparator<Person> ageComparator = new Comparator<Person>() {
            @Override
            public int compare(Person person1, Person person2) {
                return person1.getAge() - person2.getAge();
            }
        };

        // Сортировка списка с использованием компаратора
        Collections.sort(people, ageComparator);

        // Вывод отсортированного списка
        for (Person person : people) {
            System.out.println(person.getName() + " - " + person.getAge());
        }
    }
}


В данном примере компаратор ageComparator сравнивает объекты Person по их возрасту, и список people сортируется с использованием этого компаратора. Результатом будет вывод отсортированного списка в порядке возрастания возраста:

1
2
3
Charlie - 20
Alice - 25
Bob - 30