Sobes.tech
Junior

¿Cuál es la diferencia entre Comparator y Comparable?

sobes.tech AI

Respuesta de la IA

Comparable se utiliza para definir el orden "natural" de clasificación para un objeto de clase. Implementa la interfaz Comparable<T>, proporcionando el método compareTo(T o).

Comparator se usa para definir uno o varios órdenes de clasificación alternativos. Implementa la interfaz Comparator<T>, proporcionando el método compare(T o1, T o2).

Las principales diferencias se presentan en la tabla:

Característica Comparable Comparator
Interfaz java.lang.Comparable<T> java.util.Comparator<T>
Método de ordenación compareTo(T o) compare(T o1, T o2)
Uso Dentro de la clase del objeto Clase separada o lambda
Ubicación de la lógica En la misma clase En un lugar separado
Cantidad de órdenes Solo uno "natural" Múltiples alternativos
Cambio en la clase Requiere modificar la clase No requiere modificar la clase

Ejemplo de uso de Comparable:

// Clase que implementa Comparable para ordenar por nombre
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) {
        // Comparación por nombre
        return this.name.compareTo(other.name);
    }

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

Ejemplo de uso de Comparator:

// Comparator para ordenar por edad
import java.util.Comparator;

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        // Comparación por edad
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}