在下面的代码中,显示CONTAINS
了每个对象的输出,而注释掉匿名对象的方法equals()
会MISSING
导致正在测试的集合。hashCode()
equals()
List<String> strings = Arrays.asList("Hello", "there", "Qix");
HashSet<String> set = new HashSet<>(strings);
for(final String s : strings)
{
boolean contains = set.contains(new Object(){
@Override
public int hashCode() {
return s.hashCode();
}
@Override
public boolean equals(Object obj) {
return true;
}
});
System.out.format("%s: %s\n",
s,
contains ? "CONTAINS" : "MISSING");
}
为什么是这样?是因为equals()
原则上该方法应该在两个对象之间对称吗?