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)
Χρήση Μέσα στην κλάση του αντικειμένου Ξεχωριστή κλάση ή lambda
Τοποθεσία λογικής Στην ίδια την κλάση Σε ξεχωριστό μέρος
Αριθμός τάξεων Μόνο μια "φυσική" τάξη Πολλές εναλλακτικές τάξεις
Αλλαγή στην κλάση Απαιτεί αλλαγή στην κλάση Δεν απαιτεί αλλαγή στην κλάση

Παράδειγμα χρήσης του 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());
    }
}