# Comparable बनाम Comparator — कोर जावा

Source: https://www.geekswithgeeks.com/hi/core-java/java-comparable-comparator

> Comparable से अपनी क्लास को एक प्राकृतिक क्रम दें, या Comparator से जितने चाहें उतने कस्टम क्रम परिभाषित करें, और उन्हें आसानी से जोड़ें।

## एक क्रम बनाम कई

`Comparable<T>` को **क्लास खुद** लागू करती है और `compareTo` से अपना एक "प्राकृतिक" क्रम परिभाषित करती है। `Comparator<T>` एक **अलग** ऑब्जेक्ट है जो बाहर से क्रम परिभाषित करता है — एक ही क्लास के लिए जितने चाहें उतने comparator हो सकते हैं।

## Comparable

कम-से-कम/बराबर/अधिक बताने के लिए negative/शून्य/positive लौटाएँ। इससे `Collections.sort(list)` व `TreeSet` बिना अतिरिक्त आर्ग्युमेंट काम करते हैं।

```java
class Employee implements Comparable<Employee> {
    int age;
    public int compareTo(Employee other) {
        return Integer.compare(this.age, other.age);
    }
}
Collections.sort(employees);   // sorted by age
```

## Comparator, आसानी से

`Comparator.comparing(...)` की-एक्सट्रैक्टर से comparator बनाता है; टाई तोड़ने के लिए `.thenComparing(...)` और क्रम पलटने के लिए `.reversed()` जोड़ें — `Employee` क्लास को छुए बिना।

```java
Comparator<Employee> byNameThenAge =
    Comparator.comparing((Employee e) -> e.name)
               .thenComparing(e -> e.age);

employees.sort(byNameThenAge.reversed());
```
