Olá pessoal, estou fazendo alguns testes com a classe HashSet e encontrei um problema, na verdade não é bem um problema é uma dúvida quanto a sobrescrição do método equals.
No meu modo de ver, assim que um objeto é adicionado ao HashSet, ele chama os métodos hashCode() e equals() para conferir onde e se deve alocar esse objeto, correto?
Na realização dos meus testes, inseri um syso("") nos métodos equals() e hashCode().
O syso(""); do hashCode ele chama normalmente (me traz uma resposta no console), porém não chama o do equals(), alguém poderia me explicar porque isso acontece?
Segue o código abaixo:
import java.util.HashSet;
class Person {
String name;
public Person(String name) {
this.name = name;
}
@Override
public int hashCode() {
System.out.println("call hash"); <= esse mé chamado normalmente
return 1;
}
@Override
public boolean equals(Object o) {
System.out.println("call equals"); <= na saída não não chama esse método
return false;
}
public String toString(){
return name;
}
}
public class TestePerson {
public static void main(String[] args) {
HashSet<Person> a = new HashSet<Person>();
Person p = new Person("a");
Person c = new Person("a");
//System.out.println(p.equals(p));
a.add(p);
a.add(p);
System.out.println(a);
}
}
Estou começando a duvidar que esse código está chamando o método equals() de Object.
Alguém pode me ajudar?
Grato.
Abs.