Hola,
Para que le HashSet funcione se requiere que implementes el método:
public int hashCode();
HashSet usa el método hashCode para localizar el objeto que quieres
remover. Con lo cual si el objeto que está en el HashSet y el objeto que
pasas en el remove tienen distintos hashCode, HashSet no va a poder
remover el objeto del Hash aunque el método equals retorne TRUE.
En tu caso yo implementaría el método hashCode de la siguiente manera:
public int hashCode()
{
return this.id;
}
Aquí estoy asumiendo que "id" es un int.
También seria conveniente que cuando implementes equals tomes en cuenta
todas las posibilidades, así te vas a evitar muchos dolores de cabeza.
public boolean equals(Object obj)
{
if(obj == null) return false;
if(obj instanceof MiObjeto)
{
MiObjeto sp=(MiObjeto)obj;
return this.id == sp.id;
}
return false;
}
Bye
Cesar Mendoza
http://www.kitiara.org
--
"If I have seen further it is by standing on the shoulders of giants."
--Isaac Newton
On Wed, Mar 26, 2008 at 01:37:03PM -0000, neithblue009 wrote:
> Buenos dias.
> Tengo un problema con el metodo remove del hashset.
> Necesito quitar objetos del hashset, y para definir si son o no
> iguales comparo con el id del objeto.
> 1-Sobreescribi el metodo equals:
> public boolean equals(Object obj)
> {
> MiObjeto sp=(MiObjeto)obj;
> if ( this.id == sp.id ) return true;
> }
> 2-Me comentaron que el metodo remove usa el metodo equals para poder
> saber si existen elementos iguales, pero en realidad no esta pasando
> por alli, de hecho me da un error. El error es manejado por DWR y no
> tengo la descripcion.
>
> Por favor me gustaria que me aclararan el uso del metodo equals y el
> metodo hashcode... y por supuesto porque no pasa el remove por el equals.
>
> Gracias..
> "Neith-->"
>