Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Comparable y Comparator.

Comparator en Java permite definir criterios de ordenamiento externos a la clase del objeto, mientras que Comparable, no modifica la clase original, sino que se implementa en una clase aparte o con expresiones lambda. Permitiendo crear múltiples formas de ordenar un mismo tipo de objeto.

Se utiliza comúnmente con métodos como Collections.sort() o List.sort(). Es muy útil cuando no se puede o no se desea alterar la clase original.

1 respuesta

Hola Liliana,

¡Entiendo tu duda! Has captado bien las diferencias entre Comparable y Comparator. Permíteme darte un ejemplo práctico para que puedas ver cómo funcionan ambos en acción.

Supongamos que tienes una clase Persona con atributos como nombre y edad. Si deseas ordenar una lista de personas por edad, puedes hacerlo de dos maneras:

  1. Usando Comparable: Implementas la interfaz Comparable en la clase Persona y defines el método compareTo para establecer el criterio de ordenamiento natural. Por ejemplo, podrías ordenar por edad de la siguiente manera:

    public class Persona implements Comparable<Persona> {
        private String nombre;
        private int edad;
    
        public Persona(String nombre, int edad) {
            this.nombre = nombre;
            this.edad = edad;
        }
    
        @Override
        public int compareTo(Persona otraPersona) {
            return Integer.compare(this.edad, otraPersona.edad);
        }
    }
    

    Luego, puedes usar Collections.sort(listaDePersonas) para ordenar por edad.

  2. Usando Comparator: Si no deseas modificar la clase Persona o quieres tener múltiples formas de ordenar, puedes crear un Comparator externo. Por ejemplo, para ordenar por nombre:

    import java.util.Comparator;
    
    public class ComparadorPorNombre implements Comparator<Persona> {
        @Override
        public int compare(Persona p1, Persona p2) {
            return p1.getNombre().compareTo(p2.getNombre());
        }
    }
    

    Y luego, usarlo así: Collections.sort(listaDePersonas, new ComparadorPorNombre()).

O también podrías usar expresiones lambda para simplificar:

Collections.sort(listaDePersonas, (p1, p2) -> p1.getNombre().compareTo(p2.getNombre()));

Espero que estos ejemplos te ayuden a entender mejor cómo y cuándo usar Comparable y Comparator. ¡Espero haber ayudado y buenos estudios!