Comparable vs Comparador en Java

Diferencia clave entre comparable y comparador en Java

  • Comparables en Java es un objeto para compararse con otro objeto, mientras que Comparador es un objeto para comparar diferentes objetos de diferentes clases.
  • Comparable proporciona el compareTo() mรฉtodo para ordenar elementos en Java, mientras que Comparator proporciona la compare() mรฉtodo para ordenar elementos en Java.
  • Una interfaz comparable estรก presente en java.lang paquete, mientras que la interfaz Comparator estรก presente en java.util Pack
  • Comparable proporciona una รบnica secuencia de clasificaciรณn, mientras que Comparator proporciona mรบltiples secuencias de clasificaciรณn.
  • Comparable afecta a la clase original, mientras que Comparator no afecta a la clase original.

Diferencia entre comparable y comparador
Diferencia entre comparable y comparador

Aquรญ, he analizado la diferencia entre comparable y Comparator y evaluarรฉ exhaustivamente sus ventajas y desventajas.

ยฟQuรฉ es comparable en Java?

Comparable in Java es un objeto que se compara con otro objeto. Ayuda a ordenar la lista de objetos personalizados. Java.lang.La interfaz comparable debe ser implementada por una clase para poder comparar sus instancias. Una serie de objetos que implementan una interfaz comparable se clasifica automรกticamente por Arrays.sort y Collections.sort mรฉtodos.

Mรฉtodo utilizado en Comparables

Me gustarรญa resaltar un mรฉtodo importante que uso con frecuencia en la interfaz Comparable:

Comparar con():

El mรฉtodo CompareTo() se utiliza para realizar una ordenaciรณn natural de una cadena. El significado de la ordenaciรณn natural es el orden de clasificaciรณn que se aplica al objeto, por ejemplo, orden numรฉrico para ordenar nรบmeros enteros, orden alfabรฉtico para cadenas, etc.

La sintaxis de CompareTo() mรฉtodo es el siguiente:

int compareTo(T obj)

En la sintaxis anterior, T significa el tipo de objetos que vas a comparar.

CompareTo() el mรฉtodo compara el objeto con T obj.

Salida:

  • Devuelve 0 si los valores son iguales.
  • Si el objeto tiene un valor menor, entonces este mรฉtodo devuelve un valor negativo.
  • Si el objeto tiene un valor mรกs alto, devuelve un valor positivo.

Un ejemplo de comparable en Java

El siguiente programa de Java Un ejemplo comparable muestra la comparaciรณn de dos caracteres, "a" y "b". El carรกcter "a" va antes de la "b" alfabรฉticamente.

Por lo tanto, la salida es -1. El carรกcter "b" viene despuรฉs de "a" alfabรฉticamente. Por lo tanto, el resultado es 1. Los caracteres "a" y "b" son equivalentes. Por tanto, la salida es 0.

public class Sample_String {
    public static void main(String[] args) {
        String str_Sample = "a";
        System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b"));
        str_Sample = "b";
        System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a"));
        str_Sample = "b";
        System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b"));
    }
}

Salida

Compare To 'a' b is : -1
Compare To 'b' a is : 1
Compare To 'b' b is : 0

ยฟQuรฉ es un comparador en Java?

Un comparador in Java es un objeto para comparar diferentes objetos de diferentes clases. La interfaz del comparador en Java Tambiรฉn se utiliza para organizar los objetos de clases definidas por el usuario. Incluye dos mรฉtodos de interfaz de comparaciรณn importantes conocidos como comparar (Objeto obj1, Objeto obj2) y igual (elemento Objeto).

Mรฉtodo utilizado en Comparator

En mi prรกctica, con frecuencia confรญo en los siguientes mรฉtodos crรญticos de la interfaz del comparador:

Comparar():

Compare() Le permite ordenar objetos. Para hacer esto, debes crear una clase que implemente una interfaz de comparaciรณn. Despuรฉs de esto, debes anular su mรฉtodo de comparaciรณn.

La sintaxis del compare() mรฉtodo es el siguiente:

compare(Object obj1, Object obj2)

En la sintaxis anterior, obj1 y obj2 son dos objetos que debes comparar usando el mรฉtodo compare(). compare() mรฉtodo.

Salida:

  • Devuelve un nรบmero entero negativo si el primer argumento es menor que el segundo.
  • Devuelve cero si el primer argumento y el segundo argumento son iguales.
  • Este mรฉtodo puede devolver un nรบmero entero positivo en el caso de que el primer argumento sea mayor que el segundo.

Tienes que asegurarte de que la relaciรณn sea transitiva. Por ejemplo, ((compare(a, b)>0) && (compare(b, c)>0)) que implica comparar(a, c)>0.

Un ejemplo de comparable en Java

En el siguiente Java ejemplo comparador, hay 6 las variables. โ€œxโ€, โ€œyโ€, โ€œpโ€, โ€œqโ€, โ€œrโ€ y โ€œsโ€. La salida es -1 porque el valor de โ€œxโ€, 20 es menor que el valor de โ€œyโ€, 30. La salida es 0 porque el valor de โ€œpโ€, 40 es igual al valor de โ€œqโ€, 40 .

import java.lang.Integer; 
public class example { 
    public static void main(String args[]) 
    { 
        int x = 20; 
        int y = 30; 
        // as 10 less than 20, 
        // Output will be a value less than zero 
        System.out.println(Integer.compare(x, y)); 
        int p = 40; 
        int q = 40; 
        // as 30 equals 30, 
        // Output will be zero 
        System.out.println(Integer.compare(p, q)); 
        int r = 20; 
        int s = 7; 
        // as 15 is greater than 8, 
        // Output will be a value greater than zero 
        System.out.println(Integer.compare(r, s)); 
    } 
}

Salida:

-1
0
1

Es igual():

Equals() verifica si el objeto numรฉrico es igual al objeto que se pasa como argumento o no.

La sintaxis del equals() mรฉtodo es el siguiente:

public boolean equals(Object o)

Este mรฉtodo toma dos parรกmetros: 1) cualquier objeto y 2) un valor de retorno. Devuelve verdadero si el argumento pasado no es nulo y es un objeto de tipo similar que tiene el mismo valor numรฉrico.

Ejemplo de mรฉtodo igual:

En el siguiente ejemplo, compararรฉ las cuatro variables entre sรญ. Tres variables son de tipo entero y una es de tipo corto. El primer resultado es falso ya que el valor de p, que es 5, no es igual al valor de q, que es 20.

El segundo resultado es verdadero porque el valor de las variables p y r es el mismo, que es 5. Por รบltimo, el resultado es falso, ya que las variables p y s tienen valores asignados diferentes.

public class Test { 
   public static void main(String args[]) {
      Integer p = 5;
      Integer q = 20;
      Integer r =5;
      Short s = 5;
      System.out.println(p.equals(q));  
      System.out.println(p.equals(r)); 
      System.out.println(p.equals(s));
   }
}

Salida

false
true
false

Diferencias entre comparable y comparador en Java

A menudo veo confusiรณn entre Java Comparable y Comparador; Aquรญ estรก la principal diferencia:

Diferencia entre comparable y comparador en Java
Diferencia entre comparable y comparador en Java

Base de comparaciรณn Comparable comparador
Mรฉtodo Ofertas comparables compareTo() mรฉtodo para ordenar elementos en Java. El comparador proporciona compare() mรฉtodo para ordenar elementos en Java.
PREMIUM Una interfaz comparable estรก presente en java.lang Pack Una interfaz de comparaciรณn estรก presente en java.util Pack
Lรณgica de clasificaciรณn La lรณgica de clasificaciรณn debe estar en la misma clase que el objeto que vas a clasificar. La lรณgica de clasificaciรณn debe estar en clases separadas para escribir diferentes clasificaciones basadas en diferentes atributos de los objetos.
Objeto de clase La clase cuyos objetos desea ordenar debe implementar la interfaz Comparable. Una clase cuyos objetos desea ordenar no necesita implementar una interfaz de comparaciรณn.
Ordenar secuencias Proporciona secuencias de clasificaciรณn รบnicas. Proporciona mรบltiples secuencias de clasificaciรณn.
Orden de clasificaciรณn Este mรฉtodo puede ordenar los datos segรบn el orden de clasificaciรณn natural. Este mรฉtodo clasifica los datos segรบn el orden de clasificaciรณn personalizado.
Clase Afecta a la clase original. es decir, se modifica la clase real. No afecta a la clase original, es decir, la clase real no se modifica.
Uso Implementado con frecuencia en la API por Calendario, clases Wrapper, Fecha y
Cuerda
Se implementa para ordenar instancias de clases de terceros.
Implementar Todas las clases contenedoras y clases de cadenas implementan interfaces comparables. Las รบnicas clases implementadas de Comparator son Collator y RuleBasedColator.

Mejores prรกcticas al utilizar Comparator y Comparable en Java

  • Utilice una interfaz comparable cuando la comparaciรณn sea estรกndar para la clase especรญfica.
  • Puedes usar lambdas con un comparador.
  • Muchas de las clases principales disponibles implementan una interfaz comparable.
  • Es posible utilizar TreeSet y TreeMap mientras ordena Conjunto o Mapa.
  • El compareTo() El mรฉtodo funciona tanto con comparador como con comparable.
  • Utilice la interfaz del comparador sรณlo cuando < requiera mรกs flexibilidad.
  • El compareTo() El mรฉtodo devolverรก un nรบmero entero positivo si el primer objeto es mayor que el otro, negativo si es menor y cero si ambos son iguales.

Cรณmo elegir entre un comparable y un comparador

En conclusiรณn, mi experiencia prรกctica sugiere que aprovechar Comparable y Comparator en Java eleva significativamente el control que tenemos sobre la clasificaciรณn de datos, mejorando tanto el rendimiento como la funcionalidad.

Resumir este post con: