Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Cómo compara HashSet

Estas en el tema de Cómo compara HashSet en el foro de Java en Foros del Web. Hola a todos! He creado una clase como la siguiente: Código: public class City { private String name; private String country; private float lat; private ...
  #1 (permalink)  
Antiguo 11/03/2016, 12:55
 
Fecha de Ingreso: febrero-2013
Mensajes: 42
Antigüedad: 11 años, 2 meses
Puntos: 0
Pregunta Cómo compara HashSet

Hola a todos!

He creado una clase como la siguiente:

Código:
public class City {
    private String name;
    private String country;
    private float lat;
    private float lon;

   // getters, setters,...
}
Quiero rellenar un HashSet de elementos de la clase city, y voy creando objetos city y añadiendo en el hash:

Código:
HashSet<City> hash = new HashSet<>();
...
hash.add(city);
...
...
hash.add(city);
La pregunta es... ¿cómo compara el hashset en sus elementos para decidir si debe añadir el objeto city al hash?

¿Depende de cómo haya implementado yo el método hashCode de la clase city? ¿O bien el método equals?

Gracias!
  #2 (permalink)  
Antiguo 11/03/2016, 16:41
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Cómo compara HashSet

Hola:

Compara usando el equals().

El equals() y el método hashCode() están relacionados, por lo que si implementas uno, deberías implementar el otro y de forma coherente, siguiendo las siguientes reglas:

1) Si dos objetos son equals(), deben tener el mismo hashCode()
2) Si dos objetos tienen el mismo hashCode(), pueden o no ser equals()

Lo mejor es que el IDE te genere los dos de forma automática usando los atributos de tu clase que quieras.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 13/03/2016, 02:46
 
Fecha de Ingreso: febrero-2013
Mensajes: 42
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Cómo compara HashSet

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Compara usando el equals().

El equals() y el método hashCode() están relacionados, por lo que si implementas uno, deberías implementar el otro y de forma coherente, siguiendo las siguientes reglas:

1) Si dos objetos son equals(), deben tener el mismo hashCode()
2) Si dos objetos tienen el mismo hashCode(), pueden o no ser equals()

Lo mejor es que el IDE te genere los dos de forma automática usando los atributos de tu clase que quieras.

Se bueno.
Gracias, chuidiang!

He dejado que Netbeans me genere estos métodos, pero encuentro objetos repetidos.

Voy a investigar a ver si consigo modificar algo para que los vea distintos.

Gracias!

Etiquetas: clase, objeto, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:02.