这是我的代码:
public class testGui {
public static void main(String[] arg){
class TESTS{
String t;
public TESTS(String t){
this.t = t;
}
@Override
public boolean equals(Object x){
System.out.println("My method is called...");
if(x instanceof TESTS){
TESTS zzz = (TESTS) x;
return zzz.t.compareTo(t)==0;
}
else return false;
}
}
HashSet<TESTS> allItems = new HashSet<TESTS>();
allItems.add(new TESTS("a"));
allItems.add(new TESTS("a"));
System.out.println(allItems.contains(new TESTS("a")));
}
}
我不明白为什么HashSet的contains方法没有按照它们的规范调用我的equals方法:
更正式地说,如果此集合不包含满足(o==null ? e==null : o.equals(e))的元素e,则将指定元素o添加到该集合中。
我的代码返回false并且没有进入我的equals方法。
非常感谢您的回答!
equals
方法。我也同意仅覆盖hashCode
是不合逻辑的,这就是为什么我强烈建议不要这样做。但是,它并不会违反契约。 - Matthew Flaschen