您可以添加一个equals
在 id 上进行比较的方法,默认情况下Object
它们等于另一个==
- 即相同的实例。这不是你想要的。
public class Item implements Comparable<Item> {
public String id;
public String desc;
public String getId() {
return id;
}
@Override
public int compareTo(Item o) {
return getId().compareTo(o.getId());
}
@Override
public int hashCode() {
int hash = 7;
hash = 17 * hash + Objects.hashCode(this.id);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Item)) {
return false;
}
final Item other = (Item) obj;
if (!Objects.equals(this.id, other.id)) {
return false;
}
return true;
}
}
无论如何,鉴于您的方法和与 equals 一致compareTo
的要求,这确实是一种很好的做法-如果它们具有相同的.现在将返回 true 。a.equals(b)
id
因为你现在有一个equals
方法,所以你必须有一个hashCode()
方法,再次符合 equals 的要求。
请注意,如果您equals
在超类中重写该方法,除非您在最后使用调用,否则这显然不起作用return super.equals
。
现在,使用List
该contains
方法可以保证 O(n) - 这非常慢。我建议使用保证 O(1)的Set
地方。contains
如果您需要维护订单,请使用 aLinkedHashSet
甚至更好的 a TreeSet
,它将使用您的compareTo
方法自动订购商品。
无论如何,您总是可以通过一个 O(n) 调用将事情变成List
事后...