簡體   English   中英

在Java7中重寫compareTo和Compare

[英]Overriding compareTo and Compare in java7

為了滿足Comparable合同,我在Java中重寫CompareTo和Compare方法時是否需要重寫equals()方法? 當我執行Collections.sort或Array.sort時,這會產生任何問題嗎?

從Javadoc for Comparator

通常是這種情況,但並非嚴格要求(compare(x,y)== 0)==(x.equals(y))。 一般而言,任何違反此條件的比較器都應明確指出這一事實。 推薦的語言是“注意:此比較器施加與等式不一致的順序”。

這意味着您通常不需要重寫equals() 除非您希望Comparator對兩個值返回非零比較,而兩個值與equals比較時返回true ,則您可能不應該這樣做。

如果您認為比較的存在要求您更改兩個事物相等意味着什么的定義,那么您可能設計得很糟糕。

Comparable

當且僅當e1.compareTo(e2) == 0 C類的每個e1e2具有與e1.equals(e2)相同的布爾值時,才可以認為C類的自然排序與equals一致。 請注意, null不是任何類的實例,即使e.equals(null)返回falsee.compareTo(null)仍應引發NullPointerException

強烈建議(盡管不是必需的)自然順序應與equals保持一致 之所以如此,是因為沒有顯式比較器的排序集(和排序映射)與自然排序與等式不一致的元素(或鍵)一起使用時,其行為“奇怪”。 特別是,這樣的排序集(或排序圖)違反了根據equals方法定義的集合(或圖)的一般約定。

(強調我的)

因此,您不需要重寫equals() (即,由於它們僅使用compareTo() ,因此不會在標准sort方法內引起問題,也不會違反Comparable的約定),但肯定不會受到傷害。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM