【发布时间】:2014-02-07 11:39:46
【问题描述】:
我在一个教程中找到了这个例子。
当我运行这个时,我得到 hs.size() 值为 2 ..并且 equals 方法只被调用一次 任何人解释我在 HashSet 中调用 equal() 方法时
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());
}
}
上述程序中equal方法调用时
【问题讨论】:
-
当
a.hashCode() == b.hashCode()。即equals用于在hashCode冲突的情况下确定两个对象是否相同。 (它也可以在contains和remove方法中使用,但你不要在这里使用它们)。 -
equals将被调用两次,但您只会记录其中一个调用,因为另一个调用是 String 的方法。
标签: java