Sobes.tech
Junior

Kuo skiriasi Comparator ir Comparable?

sobes.tech AI

Atsakymas iš AI

Comparable naudojamas apibrėžti "natūralų" objektų rūšiavimo tvarką. Jis įgyvendina Comparable<T> sąsają ir teikia metodą compareTo(T o).

Comparator naudojamas apibrėžti vieną ar kelis alternatyvius rūšiavimo tvarkus. Jis įgyvendina Comparator<T> sąsają ir teikia metodą compare(T o1, T o2).

Pagrindiniai skirtumai pateikti lentelėje:

Bruožas Comparable Comparator
Sąsaja java.lang.Comparable<T> java.util.Comparator<T>
Rūšiavimo metodas compareTo(T o) compare(T o1, T o2)
Naudojimas Objekto klasės viduje Atskira klasė arba lambda
Logikos vieta Pačiame klasėje Atskirame vietoje
Tvarkų skaičius Tik vienas "natūralus" rūšiavimas Daug alternatyvių rūšiavimų
Klasės keitimas Reikalauja klasės keitimo Nereikalauja klasės keitimo

Comparable naudojimo pavyzdys:

// Klasė, įgyvendinanti Comparable, rūšiavimui pagal vardą
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) {
        // Palyginimas pagal vardą
        return this.name.compareTo(other.name);
    }

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

Comparator naudojimo pavyzdys:

// Amžiaus rūšiavimui Comparator
import java.util.Comparator;

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        // Palyginimas pagal amžių
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}