回答
它的期望可以在這裏閱讀:http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html
這將是您最感興趣的部分大概是:
強烈推薦(雖然不是必須的)天然 排序與平等一致。這是因爲排序集 (和排序的地圖)沒有明確的比較行爲「奇怪」,當 它們與自然排序是 與等號不一致的元素(或鍵)使用。特別是,這樣的排序集合(或排序後的映射)違反了集合(或映射)的一般合同,該集合根據等號方法定義爲 。
它在解釋JavaDocs:
一類
C
的自然順序被說成是符合等於當且僅當e1.compareTo(e2) == 0
對每一個e1
相同的布爾值e1.equals(e2)
和e2
的類別C
請注意,它不是要求,即如果兩個類別根據compareTo()
相等,則它們不必保持equals()
。這很好,因爲您可以按年齡對人進行排序,因此,兩個年齡相同的人在Comparator<Person>
方面被認爲是相同的,但他們顯然不必相同。
但是,在這種特殊情況下,如果年齡相等(如果排序總是穩定並且可以在相同年齡段的人中進行預測),那麼您可能需要爲比較器添加輔助屬性,因此畢竟包含compareTo()
中的相同屬性可能是一個好主意在某些情況下。
爲Comparator
的文檔有謹慎注意:
由比較器C上的一組元素S中的排序被認爲是與等號當且僅當c.compare(E1,E2一致)== 0具有相同的布爾值作爲e1.equals(E2),用於在每S. e1和e2
應謹慎使用能夠施加的排序不一致與equals訂購有序集合的比較器時行使(或有序地圖)。假設使用顯式比較器c的排序集合(或排序映射)與從集合S中繪製的元素(或鍵)一起使用。如果由S對c施加的排序與equals不一致,則排序集合(或排序映射)將表現「奇怪」。特別是,排序後的集合(或排序後的映射)將違反集合(或映射)的一般合約,集合(或映射)以等式定義。
我想告訴你,你應該在對象中有一個特定的屬性或屬性,你將用它來比較兩個相同類型的對象。
- 1. 重寫compareTo時使用compareTo方法?
- 2. 爲什麼在重寫compareTo()方法時使用Comparable接口的compareTo()?
- 3. Java Comprable重寫還是不重寫compareTo?
- 4. 從擴展類重寫compareTo - 發生了什麼?
- 5. 如何重寫compareTo(Java)
- 6. Java:什麼是compareTo接口語義?
- 7. compareTo()返回什麼?
- 8. Image.cache有什麼含義?
- 9. 在這個Scala代碼中,compareTo與compareTo有什麼不同?
- 10. 重寫javax.servlet.Servlet.getServletInfo()有什麼用?
- 11. CSS中的重要含義是什麼?
- 12. x:Xamarin Button的雙重含義是什麼?
- 13. 重新定位的含義是什麼?
- 14. 重寫compareTo方法的對象類
- 15. 乾淨的可重寫的compareTo()方法?
- 16. 功能重寫的compareTo()方法的
- 17. 在Xcode 8中重置iOS分發證書有什麼含義?
- 18. 爲什麼CompareTo短這麼實現?
- 19. 丟失P3P文件有什麼含義?
- 20. **在Java中有什麼含義?
- 21. 從foo中選擇*有什麼含義?
- 22. Webpack運行時帶有什麼含義?
- 23. Angularjs沙箱逃逸有什麼含義?
- 24. 是否有可能在Java中重寫String的compareTo方法?
- 25. 爲什麼Int16.CompareTo從Int32返回不同的結果.CompareTo
- 26. 這個聲明對重寫hashcode和equals有什麼意義?
- 27. 爲什麼重寫==必須重寫equals?
- 28. 這個URL重寫有什麼問題?
- 29. HTML重寫有什麼好的選擇?
- 30. 這個.htaccess重寫有什麼問題
不久發佈的鏈接之後,我決定不偷懶,實際上覆制/粘貼到一個答案:) – Corbin 2012-03-18 08:51:03