Sobes.tech
Junior

Каква е разликата между Comparator и Comparable?

sobes.tech AI

Отговор от AI

Comparable се използва за определяне на "естествения" ред на сортиране на обект от клас. Реализира интерфейса Comparable<T> и предоставя метода compareTo(T o).

Comparator се използва за определяне на един или няколко алтернативни реда на сортиране. Реализира интерфейса Comparator<T> и предоставя метода compare(T o1, T o2).

Основните разлики са представени в таблицата:

Характеристика Comparable Comparator
Интерфейс java.lang.Comparable<T> java.util.Comparator<T>
Метод за сортиране compareTo(T o) compare(T o1, T o2)
Използване Вътре в класа на обекта Отделен клас или ламбда
Местоположение на логиката В самия клас На отделно място
Брой редове Само един "естествен" ред Множество алтернативни редове
Промяна на класа Изисква промяна на класа Не изисква промяна на класа

Пример за използване на Comparable:

// Клас, реализиращ Comparable за сортиране по име
class Person implements Comparable<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;
    }

    @Override
    public int compareTo(Person other) {
        // Сравнение по име
        return this.name.compareTo(other.name);
    }

    @Override
    public String toString() {
        return "Person{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
    }
}

Пример за използване на Comparator:

// Comparator за сортиране по възраст
import java.util.Comparator;

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        // Сравнение по възраст
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}