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