Comparable vs Comparador en Java

Diferencia clave entre comparable y comparador en Java

  • Comparable 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 paquete.
  • 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 en Java es un objeto que compares mismo con otro objeto. Ayuda a ordenar la lista de objetos personalizados. La interfaz comparable Java.lang.The 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 and 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():

Método comparar con () se utiliza para realizar una clasificación natural en una cadena. El significado de clasificación natural es el orden de clasificación que se aplica al objeto, por ejemplo, orden numérico para clasificar 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() método de comparaciónares 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 following El ejemplo comparable del programa Java 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 en 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 me baso en lo siguientewing 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 ejemplo de comparador de Java, 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 Comparator; 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.
Paquete Una interfaz comparable está presente en java.lang paquete. Una interfaz de comparación está presente en java.util paquete.
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.
  • The compareTo() El método funciona tanto con comparador como con comparable.
  • Utilice la interfaz del comparador sólo cuando < requiera más flexibilidad.
  • The 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.