Saltar al contenido

¿Cuál es la diferencia entre compare () y compareTo ()?

Solución:

Desde JavaNotes:

  • a.compareTo(b):
    Interfaz comparable: Compara valores y devuelve un int que indica si los valores se comparan menor que, igual o mayor que.
    Si sus objetos de clase tienen un orden natural, implementar el Comparable<T> interfaz y defina este método. Todas las clases de Java que tienen un implemento de ordenación natural Comparable<T> – Ejemplo: String, clases contenedoras, BigInteger

  • compare(a, b):
    Interfaz del comparador: Compara los valores de dos objetos. Esto se implementa como parte del Comparator<T> interfaz, y el El uso típico es definir una o más clases de utilidad pequeñas que implementan esto, para pasar a métodos como sort() o para usar ordenando estructuras de datos como TreeMap y TreeSet. Es posible que desee crear un objeto Comparador para lo siguiente:

    • Varias comparaciones. Proporcionar varias formas diferentes de ordenar algo. Por ejemplo, es posible que desee ordenar una clase Person por nombre, ID, edad, altura, … Debería definir un Comparador para que cada uno de estos pase al sort() método.
    • Clase de sistema Para proporcionar métodos de comparación para clases sobre las que no tiene control. Por ejemplo, podría definir un Comparador para cadenas que las compara por longitud.
    • Patrón de estrategia Para implementar un patrón de estrategia, que es una situación en la que desea representar un algoritmo como un objeto que puede pasar como parámetro, guardar en una estructura de datos, etc.

Si los objetos de su clase tienen un orden de clasificación natural, es posible que no necesite comparar ().


Resumen de http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html

Comparable

Un objeto comparable es capaz de compararse con otro objeto.

Comparador

Un objeto comparador es capaz de comparar dos objetos diferentes. La clase no está comparando sus instancias, sino las instancias de alguna otra clase.


Contextos de casos de uso:

Interfaz comparable

El método de iguales y == y != operadores prueba de igualdad / desigualdad, pero no proporcionan una forma de probar los valores relativos.
Algunas clases (por ejemplo, String y otras clases con un orden natural) implementan la Comparable<T> interfaz, que define una compareTo() método.
Querrás implementar Comparable<T> en tu clase si quieres usarlo con Collections.sort() o Arrays.sort() métodos.

Definición de un objeto comparador

Puede crear comparadores para ordenar cualquier forma arbitraria para cualquier clase.
Por ejemplo, el String clase define el CASE_INSENSITIVE_ORDER comparador.


La diferencia entre los dos enfoques se puede vincular a la noción de:
Colección ordenada:

Cuando se ordena una colección, significa que puede iterar en la colección en un orden específico (no aleatorio) (un Hashtable no está ordenado).

Una colección con orden natural no solo está ordenado, sino ordenado. ¡Definir un orden natural puede ser difícil! (como en el orden de cadena natural).


Otra diferencia, señalada por HaveAGuess en los comentarios:

  • Comparable está en la implementación y no es visible desde la interfaz, por lo que cuando ordena no sabe realmente qué va a pasar.
  • Comparator le asegura que el orden estará bien definido.

compareTo() es del Comparable interfaz.

compare() es del Comparator interfaz.

Ambos métodos hacen lo mismo, pero cada interfaz se usa en un contexto ligeramente diferente.

La interfaz Comparable se utiliza para imponer un orden natural a los objetos de la clase de implementación. los compareTo() El método se denomina método de comparación natural. La interfaz Comparator se utiliza para imponer un orden total a los objetos de la clase de implementación. Para obtener más información, consulte los enlaces para saber exactamente cuándo usar cada interfaz.

Similitudes:

Ambas son formas personalizadas de comparar dos objetos.
Ambos devuelven un int describiendo la relación entre dos objetos.

Diferencias:
El método compare() es un método que está obligado a implementar si implementa el Comparator interfaz. Le permite pasar dos objetos al método y devuelve un int describiendo su relación.

Comparator comp = new MyComparator();
int result = comp.compare(object1, object2);

El método compareTo() es un método que está obligado a implementar si implementa el Comparable interfaz. Permite comparar un objeto con objetos de tipo similar.

String s = "hi";
int result = s.compareTo("bye");

Resumen:

Básicamente son dos formas diferentes de comparar cosas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *