Tengo una pregunta rápida sobre las colecciones TreeSet
y los métodos hashCode
. Tengo un TreeSet
y le agrego objetos, antes de agregar un objeto, verifico si existe en el TreeSet
usando el método contains
.Java - TreeSet y hashCode()
tengo 2 objetos distintos, cada uno de los cuales producen un hashCode distinta usando mi implementación del método hashCode, ejemplo siguiente:
public int hashCode()
{
int hash = 7;
hash = hash * 31 + anAttribute.hashCode();
hash = hash * 31 + anotherAttribute.hashCode();
hash = hash * 31 + yetAnotherAttribute.hashCode();
return hash;
}
Los hashcodes para una ejecución particular son: 76126352 y 76126353 (los objetos sólo difieren por un dígito en un atributo).
El método contains devuelve true para estos objetos, aunque los hashCodes sean diferentes. ¿Alguna idea de por qué? Esto es realmente confuso y la ayuda realmente sería apreciada.
También utiliza el método equals, por lo que es importante que equals y Comparator/compareTo sean coherentes. –
No según los javadocs no. – sepp2k
"Esto es así porque la interfaz Set se define en términos de la operación equals, pero una instancia TreeSet realiza todas las comparaciones de elementos utilizando su método compareTo (o comparar) ..." (desde http://java.sun.com/ javase/6/docs/api/java/util/TreeSet.html) – Dirk