Sobes.tech
Junior

Mis vahe on Comparator ja Comparable vahel?

sobes.tech AI

Vastus AI-lt

Comparable kasutatakse objekti klassi "loodusliku" sorteerimisjärjestuse määratlemiseks. See rakendab Comparable<T> liidest ja pakub meetodit compareTo(T o).

Comparator kasutatakse ühe või mitme alternatiivse sorteerimisjärjestuse määratlemiseks. See rakendab Comparator<T> liidest ja pakub meetodit compare(T o1, T o2).

Peamised erinevused on tabelis:

Omadus Comparable Comparator
Liides java.lang.Comparable<T> java.util.Comparator<T>
Sorteerimise meetod compareTo(T o) compare(T o1, T o2)
Rakendamine Objekti klassi sees Eraldi klass või lambda
Loogika paiknemine Klassis Eraldi kohas
Järjestuste arv Ainult üks "looduslik" järjesta Mitmeid alternatiivseid järjesta
Klasimuutus Vajab klassi muutmist Ei vaja klassi muutmist

Comparable näide:

// Klass, mis rakendab Comparable nime järgi sorteerimiseks
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) {
        // Võrdlus nime järgi
        return this.name.compareTo(other.name);
    }

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

Comparator näide:

// Vanuse järgi sorteerimiseks Comparator
import java.util.Comparator;

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        // Võrdlus vanuse järgi
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}