Sobes.tech
Junior

Mi a különbség a Comparator és a Comparable között?

sobes.tech MI

Válasz az MI-től

A Comparable az osztály objektumának "természetes" rendezési sorrendjének meghatározására szolgál. Megvalósítja a Comparable<T> interfészt, és biztosítja a compareTo(T o) metódust.

A Comparator egy vagy több alternatív rendezési sorrend meghatározására szolgál. Megvalósítja a Comparator<T> interfészt, és biztosítja a compare(T o1, T o2) metódust.

A fő különbségek a táblázatban vannak bemutatva:

Jellemző Comparable Comparator
Interfész java.lang.Comparable<T> java.util.Comparator<T>
Rendezési módszer compareTo(T o) compare(T o1, T o2)
Alkalmazás Az objektum osztályán belül Külön osztály vagy lambda
Logika helye Az osztályon belül Egy külön helyen
Rendezések száma Csak egy "természetes" sorrend Több alternatív sorrend
Osztály módosítása Osztály módosítását igényli Nem igényel osztály módosítást

Comparable használatának példája:

// Osztály, amely a Comparable-t implementálja név szerint rendezéshez
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) {
        // Név szerint összehasonlítás
        return this.name.compareTo(other.name);
    }

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

Comparator példája:

// Kor szerint rendező Comparator
import java.util.Comparator;

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        // Kor szerint összehasonlítás
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}