Quando o HashSet chama o método igual? [duplicado]
Esta pergunta já tem uma resposta aqui:
Quando o método 'add' do HashSet chama igual? [duplicado] 4 respostasEncontrei este exemplo em um tutorial.
quando executo isso, o valor hs.size () é 2 e o método equals é chamado apenas uma vez. Alguém me explica quando o método equal () chama no HashSet.
import java.util.HashSet;
public class HashTest {
private String str;
public HashTest(String str) {
this.str = str;
}
@Override
public String toString() {
return str;
}
@Override
public int hashCode() {
return this.str.hashCode();
}
@Override
public boolean equals(Object obj) {
System.out.println("calling equal method");
if (obj instanceof HashTest) {
HashTest ht = (HashTest) obj;
System.out.println(ht.str);
return this.str.equals(ht.str);
}
else
{
System.out.println("Not equal");
}
return false;
}
public static void main(String args[]) {
HashTest h1 = new HashTest("1");
HashTest h2 = new HashTest("1");
String s1 = new String("2");
String s2 = new String("2");
HashSet<Object> hs = new HashSet<Object>();
hs.add(h1);
hs.add(h2);
hs.add(s1);
hs.add(s2);
System.out.print(hs.size());
}
}
quando o método igual chamar no programa acima