En el manual de hibernación se dice que usted tiene que sobrescribir los métodos equals () y los métodos hashCode () si tiene la intención de poner instancias de clases persistentes en un Set (la forma recomendada para representar asociaciones multivaluadas).
Así que las preguntas aparecido:
¿Por qué es un método recomendado para representar asociaciones muchos-valor en un conjunto? (¿Por qué no debería usar, digamos, ArrayList o LinkedList).
Lo que sucede detrás de la escena que debería anular esos métodos sólo cuando uso Set?
Bueno, ¿cómo lo haría una HashSet
igualdad deducir? Esto se basa en hashCode/equals
. Para una Set
que tendría que ambos métodos, por List
iguales se utiliza solamente (en un método como contains
por ejemplo), sino que se definen tanto, para que no se quede en extrañas sorpresas.
En general es una cosa buena si reemplaza compareTo
desde Comparable
tan-bien - esto es, por ejemplo, se utiliza internamente para HasMap
cuando se encuentre un empate. Usted no tiene que, de alguna manera, pero su una idea buena, si alguna vez va a tener éstos como claves en una Map
.
Que tie
como he dicho se utiliza cuando dos hashcodes son iguales y HashMap
decide trasladarse a una perfectly balanced tree node
, ver aquí o éste ; o incluso éste