Sobes.tech
Junior

Kāda ir atšķirība starp Comparator un Comparable?

sobes.tech AI

Atbilde no AI

Comparable tiek izmantots, lai noteiktu "dabas" kārtību objekta klases sakārtošanai. Tas realizē Comparable<T> saskarni un nodrošina metodi compareTo(T o).

Comparator tiek izmantots, lai noteiktu vienu vai vairākus alternatīvus kārtības secības. Tas realizē Comparator<T> saskarni un nodrošina metodi compare(T o1, T o2).

Galvenās atšķirības ir tabulā:

Raksturlielums Comparable Comparator
Saskarne java.lang.Comparable<T> java.util.Comparator<T>
Kārtības metode compareTo(T o) compare(T o1, T o2)
Lietojums Klases iekšienē Atsevišķa klase vai lambda
Lojikas izvietojums Klases iekšienē Atsevišķā vietā
Secību skaits Tikai viena "dabiska" secība Daudzas alternatīvas secības
Klases izmaiņas Prasa izmaiņas klasē Nepieciešamas izmaiņas klasē

Comparable piemērs:

// Klase, kas realizē Comparable pēc vārda
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) {
        // Salīdzinājums pēc vārda
        return this.name.compareTo(other.name);
    }

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

Comparator piemērs:

// Vecuma salīdzināšanai Comparator
import java.util.Comparator;

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        // Salīdzinājums pēc vecuma
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}