equalsidで比較するメソッドを追加できます。デフォルトでは、同じインスタンスである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と、最後にtoの呼び出しを使用しない限り、これは明らかに機能しないことに注意してください。
現在、メソッドを使用するListとcontainsO(n)が保証されます-これは非常に遅いです。O(1)が保証されているSet場所を使用することをお勧めします。contains順序を維持する必要がある場合は、LinkedHashSetまたはそれ以上の方法をTreeSet使用して、compareToアイテムを自動的に注文します。
とにかく1回のO(n)呼び出しで、いつでもList後で物事を変えることができます...