Pregunta

Estoy trabajando en un proyecto que me implica el uso de un HashSet de una clase que hice, lo que voy a nombrar Test. He definido el indiqué HashSet este modo:

HashSet<Test> t = new HashSet<Test>();
t.add(new Test("asdf", 1));
t.add(new Test("hello", 2));
t.add(new Test("hello", 3));

He intentado utilizar

t.contains(new Test("asdf", 1));

false pero vuelve. Sin embargo, cuando se utiliza un HashSet<Character> que parece funcionar bien. He intentado anular la declaración equals anterior, pero no funcionó. Traté de salir equals solo, pero yo todavía tengo false. Necesito saber lo que estoy haciendo mal?

Además, yo no modificó la función hash, lo único que ha cambiado Test.equals (Object o). Es un proyecto simple y dado que la documentación de Java afirma que utiliza o.equals (este), pensé que no tendría que hacerlo.

¿Fue útil?

Solución

Es posible que tenga sobrecargar el método hashCode () también.

Otros consejos

HashSet.add(Object data) no es igual a HashSet.add(new Test(String, int))

Trate de usar HashSet.add(new Test("asdf", 1));. Y hacer las anulaciones del método hashCode(). Se compila el código?

Su código ni siquiera compilará ...

HashSet no tiene un método Add () que acepta dos argumentos.

Si se refiere a

t.add(new Test("asdf", 1));

en lugar de

t.add("asdf", 1);

asegurarse de que el código hash y es igual método de la clase de prueba se aplica adecuadamente, como se dijo antes.

internamente una tabla hash utilizará Object # hashCode (), para discutir y un cubo de sus objetos y objeto # iguales () para comprobar la igualdad si hay enfrentamientos hashCode. Usted necesita asegurarse de que su clase de prueba proporciona implementaciones adecuadas (overrrides) estos, en su caso para comprobar la igualdad de cuerdas, de lo contrario los predeterminado objeto # método equals () utilizará la identidad ejemplo objetos (ref id). Ver aquí para un tutorial sobre este tema .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top