Olá, estou com uma dúvida com relação a esses dois métodos.
Se por exemplo eu usar uma classe chamada Person em uma Collection HashSet
HashSet<Person>
E sobrescrever apenas o método equals, ela não terá efeito, ou seja, poderei inserir objetos repetidos...
Observem o código
import java.util.HashSet;
public class PersonTest {
public static void main(String[] args) {
HashSet<Person> ps = new HashSet<Person>();
ps.add(new Person("a"));
ps.add(new Person("a"));
ps.add(new Person("a"));
System.out.println(ps.size());
}
}
class Person {
private String name;
private int age;
public Person(String name) {
this.name = name;
}
/*public int hashCode(){
System.out.println("h1");
return (int)Math.random()*1000;
}*/
public boolean equals(Object o) {
if (!(o instanceof Person))
return false;
Person p = (Person) o;
return p.name.equals(this.name);
}
}
Agora se eu descomentar o método hashCode(), ele retornará 1.
Não entendi como isso funciona...
Não entendi porque o método equals() só funciona quando eu sobrescrevo o método hashCode()
Alguém poderia me ajudar?
Grato.
