Sobes.tech
Junior

Aký je rozdiel medzi Comparator a Comparable?

sobes.tech AI

Odpoveď od AI

Comparable sa používa na určenie "prirodzeného" poradia zoradenia pre objekt triedy. Implementuje rozhranie Comparable<T> a poskytuje metódu compareTo(T o).

Comparator sa používa na definovanie jedného alebo viacerých alternatívnych poradia zoradenia. Implementuje rozhranie Comparator<T> a poskytuje metódu compare(T o1, T o2).

Hlavné rozdiely sú uvedené v tabuľke:

Vlastnosť Comparable Comparator
Rozhranie java.lang.Comparable<T> java.util.Comparator<T>
Metóda zoradenia compareTo(T o) compare(T o1, T o2)
Použitie Vo vnútri triedy objektu Samostatná trieda alebo lambda
Miesto logiky V samotnej triede Na samostatnom mieste
Počet poradí Len jedno "prirodzené" poradie Viac alternatívnych poradí
Zmena triedy Vyžaduje zmenu triedy Nevyžaduje zmenu triedy

Príklad použitia Comparable:

// Trieda implementujúca Comparable pre zoradenie podľa mena
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) {
        // Porovnanie podľa mena
        return this.name.compareTo(other.name);
    }

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

Príklad použitia Comparator:

// Comparator na zoradenie podľa veku
import java.util.Comparator;

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        // Porovnanie podľa veku
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}