Java Set,包含,错误结果

标签 java set equals contains compareto

EventObject target = new EventObject("e2");
Set<EventObject> Following = o.getFollowingEvents(e1);
System.out.println("Elements : "+Following.toString());
System.out.println(e2.toString());
System.out.println(Following.toString()+" contains "+e2+" ? = "+Following.contains(target));

打印:

Elements : [e2, e5, end, T]
e2
[e2, e5, end, T] contains e2 ? = false

等于和比较:

@Override
public int compareTo(EventObject o) {
    return this.getName().compareTo(o.getName());
}

@Override 
public boolean equals(Object obj) {
    return (obj instanceof EventObject) && (this.compareTo((EventObject) obj) == 0);
}

如果事件出现在 Set 上,这怎么可能?

最佳答案

听起来你只是忘了实现 hashCode :

@Override
public int hashCode() {
    return getName().hashCode(); // Consistent with equals
}

请注意,您实际上不需要在 equals 中执行排序比较。方法 - 您只需要检查名称是否相等。

关于Java Set,包含,错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834003/

相关文章:

java - maven pom.xml如何识别非标准项目结构中的testng测试用例?

java - 如何实现维护插入顺序的并发 Set

java - 集合列表返回重复项

java - HashMap 如何在不调用 equals 方法的情况下替换键的值

Java char 数组相等不起作用

java - 在不同的jvm实例中序列化和反序列化对象

java - Google App Engine RuntimeHelper.checkRestricted 从 antlr GAE Java 1.7 中花费了 25 倍的时间

java - 在返回类型中使用通配符与定义的泛型类型有何不同?

algorithm - 如何找到一小组顶点,使得图中从起始节点到结束节点的所有路径都至少包含这些顶点中的一个

c - int 和 float 之间的关系比较是否可以在 C 中直接进行?