Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

What is the difference between Comparable and Comparator in Java? Java में Comparable और Comparator में क्या अंतर है?

Answer
AspectComparableComparator
Packagejava.langjava.util
MethodcompareTo(Object o)compare(Object o1, Object o2)
Sorting logic locationInside the class being sortedSeparate class or lambda
Number of orderingsOnly ONE natural ordering per classMULTIPLE different orderings possible
// Comparable - defines natural ordering INSIDE the class
class Employee implements Comparable<Employee> {
    String name;
    int age;
    Employee(String name, int age) { this.name = name; this.age = age; }

    @Override
    public int compareTo(Employee other) {
        return this.age - other.age;  // natural order = by age
    }
}

List<Employee> employees = new ArrayList<>();
employees.add(new Employee('John', 30));
employees.add(new Employee('Jane', 25));
Collections.sort(employees);  // uses compareTo() - sorted by age

// Comparator - defines ordering OUTSIDE the class, multiple possible
Comparator<Employee> byName = (e1, e2) -> e1.name.compareTo(e2.name);
Comparator<Employee> byAgeDesc = (e1, e2) -> e2.age - e1.age;

employees.sort(byName);      // sort by name
employees.sort(byAgeDesc);   // sort by age, descending

// Chaining comparators (Java 8+)
Comparator<Employee> byNameThenAge = Comparator
    .comparing((Employee e) -> e.name)
    .thenComparing(e -> e.age);
पहलूComparableComparator
Packagejava.langjava.util
MethodcompareTo()compare()
Sorting logic कहांClass के अंदरअलग class/lambda
Orderings की संख्यासिर्फ एक natural orderingMultiple orderings संभव
class Employee implements Comparable<Employee> {
    String name;
    int age;
    Employee(String name, int age) { this.name = name; this.age = age; }

    @Override
    public int compareTo(Employee other) {
        return this.age - other.age;
    }
}

List<Employee> employees = new ArrayList<>();
employees.add(new Employee('John', 30));
employees.add(new Employee('Jane', 25));
Collections.sort(employees);  // age से sort

Comparator<Employee> byName = (e1, e2) -> e1.name.compareTo(e2.name);
Comparator<Employee> byAgeDesc = (e1, e2) -> e2.age - e1.age;

employees.sort(byName);
employees.sort(byAgeDesc);

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

Was this answer clear?