Sobes.tech
Junior — Middle

Фарқи байни интерфейсҳои Comparator ва Comparable дар Java чист?

sobes.tech AI

Ҷавоб аз AI

Дар Java, интерфейсҳои Comparable ва Comparator барои муқоиса кардани объектҳо истифода мешаванд, аммо мақсадҳои гуногун доранд:

  • Comparable — тартиби табиии объектҳоро муайян мекунад. Класс ин интерфейсро амалӣ мекунад, то объектҳо бо истифода аз усули compareTo() муқоиса карда шаванд. Одатан барои сорткунии пешфарз истифода мешавад.

  • Comparator — объекти алоҳидаест, ки роҳи алтернативии муқоисаи ду объектро муайян мекунад. Вақте ки мехоҳед объектҳоро дар асоси меъёрҳои гуногун сорт кунед ё вақте ки класс Comparable-ро амалӣ намекунад.

Масалан:

class Person implements Comparable<Person> {
    String name;
    int age;

    public int compareTo(Person other) {
        return this.name.compareTo(other.name); // тартиби табиӣ дар асоси ном
    }
}

// Comparator барои сорткунии дар асоси синну сол
Comparator<Person> ageComparator = new Comparator<Person>() {
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.age, p2.age);
    }
};

Бинобар ин, Comparable усули муқоисаро дар дохили класи муайян мекунад, ва Comparator имкон медиҳад, ки усулҳои муқоисаи зиёдеро дар беруни класа эҷод кунед.