Diferencia entre Comparable y Comparator en Java

Tabla de contenido:

Anonim

¿Qué es comparable en Java?

Comparable en Java es un objeto para compararse con otro objeto. Ayuda a ordenar la lista de objetos personalizados. La interfaz java.lang.Comparable debe ser implementada por una clase para comparar sus instancias. La matriz de objetos que implementan una interfaz comparable se ordena automáticamente mediante los métodos Arrays.sort y Collections.sort.

En este tutorial de Comparador vs Comparable en Java, aprenderá:

  • ¿Qué es comparable en Java?
  • ¿Qué es Comparator en Java?
  • Método utilizado en Comparable:
  • Método utilizado en Comparador:
  • Diferencia entre Comparable vs Comparator en Java
  • Prácticas recomendadas durante el uso de Comparator y Comparable en Java

¿Qué es Comparator en Java?

Comparator 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 las clases definidas por el usuario. Incluye dos importantes métodos de interfaz de comparación conocidos como comparar (Objeto obj1, Objeto obj2) e igual (Elemento de objeto).

DIFERENCIAS CLAVE:

  • Comparable proporciona el método compareTo () para ordenar elementos en Java, mientras que Comparator proporciona el método compare () para ordenar elementos en Java.
  • La interfaz comparable está presente en el paquete java.lang, mientras que la interfaz Comparator está presente en el paquete java.util.
  • Comparable proporciona una única secuencia de clasificación, mientras que Comparator proporciona varias secuencias de clasificación.
  • Comparable afecta a la clase original, mientras que comparador no afecta a la clase original.

Método utilizado en Comparable:

A continuación se muestra un método importante utilizado en la interfaz Comparable:

Comparar con():

El método CompareTo () se utiliza para realizar una clasificación natural en cadenas. El significado de la clasificación natural es el orden de clasificación que se aplica al objeto, por ejemplo, el orden numérico para clasificar los números enteros, el orden alfabético para la cadena, etc.

La sintaxis del método CompareTo () es la siguiente:

int compareTo(T obj)

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

El método CompareTo () compara el objeto con T obj.

Producción:

  • Devuelve 0 si los valores son iguales.
  • En caso de que el objeto tenga un valor menor, este método devuelve un valor negativo.
  • Si el objeto tiene un valor más alto, devuelve un valor positivo.

Ejemplo del método CompareTo ():

El siguiente programa de ejemplo comparable de Java muestra la comparación de dos caracteres, "a" y "b". El carácter "a" viene 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, la salida 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"));}}

Producción

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

Método utilizado en Comparador:

A continuación se muestran los métodos importantes utilizados en la interfaz del comparador:

Comparar():

Compare () le permite ordenar objetos. Para hacer esto, debe crear una clase que implemente la interfaz del comparador. Después de esto, debe anular su método de comparación.

La sintaxis del método compare () es la siguiente:

compare(Object obj1, Object obj2)

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

Producción:

  • Devuelve un 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 caso de que el primer argumento sea mayor que el segundo.

Debe asegurarse de que la relación sea transitiva. Por ejemplo, ((compare (a, b)> 0) && (compare (b, c)> 0)) lo que implica compare (a, c)> 0.

Ejemplo de método de comparación:

En el siguiente programa de ejemplo del comparador de Java, hay 6 variables. "x", "y", "p", "q", "r" y "s". La salida es -1 como 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 zeroSystem.out.println(Integer.compare(x, y));int p = 40;int q = 40;// as 30 equals 30,// Output will be zeroSystem.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 zeroSystem.out.println(Integer.compare(r, s));}}

Producción:

-101

Es igual a ():

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

La sintaxis del método equals () es la siguiente:

público booleano es igual a (Objeto o)

Este método toma dos parámetros 1) cualquier objeto 2) 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, comparamos las cuatro variables entre sí. Tres variables son de tipo integer y una de tipo short. 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 la variable pyr es el mismo, que es 5. Por último, la salida es falsa, ya que las variables pys tienen diferentes valores asignados.

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));}}

Producción

falsetruefalse

Diferencia entre Comparable vs Comparator en Java

Diferencia entre Comparable vs Comparator en Java

Estas son las principales diferencias entre Java Comparable y Comparator:

Comparable Comparador
Comparable proporciona el método compareTo () para ordenar elementos en Java. Comparator proporciona el método compare () para ordenar elementos en Java.
La interfaz comparable está presente en el paquete java.lang. La interfaz del comparador está presente en el paquete java.util.
La lógica de clasificación debe estar en la misma clase cuyo objeto va a clasificar. La lógica de clasificación debe estar en una clase separada para escribir diferentes clasificaciones basadas en diferentes atributos de objetos.
La clase cuyos objetos desea ordenar debe implementar una interfaz comparable. La clase, cuyos objetos desea ordenar, no necesita implementar una interfaz de comparación.
Proporciona secuencias de clasificación únicas. Proporciona múltiples secuencias de clasificación.
Este método puede clasificar los datos según el orden de clasificación natural. Este método clasifica los datos según el orden de clasificación personalizado.
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.
Implementado con frecuencia en la API por: Calendario, clases de envoltura, fecha y cadena. Se implementa para ordenar instancias de clases de terceros.
Todas las clases contenedoras y la clase String implementan una interfaz comparable. Las únicas clases de Comparator implementadas son Collator y RuleBasedColator.

Prácticas recomendadas durante el uso de 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 clases principales disponibles en implementa una interfaz comparable.
  • Es posible utilizar TreeSet y TreeMap o mientras se clasifica Set o Map.
  • El método compareTo () funciona tanto con comparador como con comparable.
  • Utilice la interfaz del comparador sólo cuando
  • El método compareTo () devolverá un entero positivo si el primer objeto es mayor que el otro, negativo si es menor y cero si ambos son iguales.