Sobes.tech
Junior — Middle

Aký je rozdiel medzi rozhraniami Comparator a Comparable v Jave?

sobes.tech AI

Odpoveď od AI

V Jave sa interfejsy Comparable a Comparator používajú na porovnávanie objektov, ale majú odlišné účely:

  • Comparable — určuje prirodné poradie objektov. Trieda implementuje tento rozhranie, aby objekty mohli byť porovnávané pomocou metódy compareTo(). Zvyčajne sa používa na predvolené zoradenie.

  • Comparator — je samostatný objekt, ktorý stanovuje alternatívny spôsob porovnávania dvoch objektov. Používa sa, keď je potrebné zoradiť objekty podľa rôznych kritérií alebo keď trieda Comparable neimplementuje.

Príklad:

class Person implements Comparable<Person> {
    String name;
    int age;

    public int compareTo(Person other) {
        return this.name.compareTo(other.name); // prirodzené poradie podľa mena
    }
}

// Comparator na zoradenie podľa veku
Comparator<Person> ageComparator = new Comparator<Person>() {
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.age, p2.age);
    }
};

Týmto spôsobom Comparable stanoví jeden spôsob porovnania v triede, zatiaľ čo Comparator umožňuje vytvárať viacero externých spôsobov porovnania.