无法将对象添加到TreeSet

时间:2013-11-26 19:13:55

标签: java equals treeset

Order添加两个TreeSet个对象时,我看到第一个被添加,但第二个被忽略。 Order.equals方法的实现如下所示。 两个对象肯定有不同的orderId s,但更重要的是我在equals方法中设置了一个断点并且它没有被击中?!

我的问题是为什么第二个Order会被添加到TreeSet。我能想到的唯一原因是它具有相同的orderId,因此它会被忽略,但绝对不是这样。

private final long orderId;

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Order other = (Order) obj;
    if (orderId != other.orderId)
        return false;
    return true;
}

2 个答案:

答案 0 :(得分:3)

TreeSet使用对象的已实现Comparable<Order>或提供的Comparator<Order>来确定等效性。

答案 1 :(得分:0)

Java documentationTreeSet也可以使用自然顺序,具体取决于使用的构造函数。你重写equals方法的方法看起来很好。