example java equals comparable

example - java.lang.Comparable e igual



comparator java (4)

Digamos que la forma en que denomino a dos objetos como iguales dentro del método equals () es diferente a la manera en que denomino a dos objetos de la misma clase como iguales dentro de toCompare () de Comparable?

Si haces esto, y pones esos objetos en un conjunto ordenado , el conjunto se comportará mal. De los documentos en SortedSet :

Tenga en cuenta que la ordenación mantenida por un conjunto ordenado (ya sea que se proporcione o no un comparador explícito) debe ser coherente con iguales si el conjunto ordenado debe implementar correctamente la interfaz de conjunto.

Por ejemplo, un TreeSet puede (erróneamente) contener dos objetos donde

a.compareTo(b) != 0

aunque

a.equals(b) == true

Si implemento java.lang.Comparable para una clase, ¿tengo que reemplazar el método equals() ? ¿O funcionará también el Comparable para equals ?

Si la respuesta es no , entonces ¿qué pasa si surge alguna discrepancia? Digamos que la forma en que denomino a dos objetos como iguales dentro del método equals() es diferente de la manera en que denomino a dos objetos de la misma clase como iguales dentro de compareTo() de Comparable .

Además, si implemento Comparable , ¿también tengo que reemplazar a equals() ?



Desde Javadoc de java.lang.Comparable :

Se recomienda encarecidamente (aunque no es obligatorio) que los ordenamientos naturales sean consistentes con los iguales.


Si bien se recomienda (y es bastante sensato) que tener a.compareTo(b) == 0 implica que a.equals(b) (y viceversa), no es obligatorio. Se puede usar Comparable cuando se realiza un pedido en una serie de objetos, mientras que equals() solo prueba la igualdad directa.

Este enlace tiene buena información sobre compareTo implementar compareTo correctamente.