Sobes.tech
Junior — Middle

Jaka jest różnica między interfejsami Comparator i Comparable w Java?

sobes.tech AI

Odpowiedź od AI

W Javie interfejsy Comparable i Comparator służą do porównywania obiektów, ale mają różne cele:

  • Comparable — określa naturalny porządek obiektów. Klasa implementuje ten interfejs, aby obiekty mogły być porównywane za pomocą metody compareTo(). Zazwyczaj używany do domyślnego sortowania.

  • Comparator — jest osobnym obiektem, który ustala alternatywny sposób porównywania dwóch obiektów. Używa się go, gdy trzeba sortować obiekty według różnych kryteriów lub gdy klasa nie implementuje Comparable.

Przykład:

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

    public int compareTo(Person other) {
        return this.name.compareTo(other.name); // naturalny porządek po imieniu
    }
}

// Comparator do sortowania po wieku
Comparator<Person> ageComparator = new Comparator<Person>() {
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.age, p2.age);
    }
};

W ten sposób, Comparable ustala jeden sposób porównania wewnątrz klasy, a Comparator pozwala tworzyć wiele zewnętrznych metod porównania.