【问题标题】:Java Set, contains, false resultJava Set,包含,错误结果
【发布时间】:2014-03-17 00:57:03
【问题描述】:
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);
}

如果事件出现在场景中,这怎么可能?

【问题讨论】:

  • 您是否覆盖了hashCode?如果你的集合是基于哈希的,你必须这样做......
  • 哈希集首先比较哈希码。

标签: java set equals contains compareto


【解决方案1】:

听起来你刚刚忘记实现hashCode

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-08
    • 2011-01-15
    • 2023-03-21
    • 2021-03-21
    • 1970-01-01
    • 2018-03-07
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多