向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;
}
答案 0 :(得分:3)
TreeSet使用对象的已实现Comparable<Order>
或提供的Comparator<Order>
来确定等效性。
答案 1 :(得分:0)
从Java documentation,TreeSet
也可以使用自然顺序,具体取决于使用的构造函数。你重写equals方法的方法看起来很好。