Sobes.tech
Junior — Middle

Jaký je rozdíl mezi rozhraními Comparator a Comparable v Java?

sobes.tech AI

Odpověď od AI

V Javě se rozhraní Comparable a Comparator používají k porovnávání objektů, ale mají různé účely:

  • Comparable — definuje přirozené pořadí objektů. Třída implementuje toto rozhraní, aby bylo možné objekty porovnávat pomocí metody compareTo(). Obvykle se používá pro výchozí řazení.

  • Comparator — je samostatný objekt, který stanoví alternativní způsob porovnávání dvou objektů. Používá se, když je třeba řadit objekty podle různých kritérií nebo když třída Comparable neimplementuje.

Příklad:

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

    public int compareTo(Person other) {
        return this.name.compareTo(other.name); // přirozené pořadí podle jména
    }
}

// Comparator pro řazení podle věku
Comparator<Person> ageComparator = new Comparator<Person>() {
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.age, p2.age);
    }
};

Tímto způsobem Comparable stanoví jeden způsob porovnání uvnitř třídy, zatímco Comparator umožňuje vytvářet více externích způsobů porovnání.