我有自定義對象的ArrayList。我需要按不同的參數進行排序,即年份和價格都是上升和下降。什麼是最好的方式來做到這一點?我想過在實例化比較器期間實現Comparator並將排序模式傳遞給構造函數。這是個好主意嗎?Java比較自定義對象
回答
我建議每個排序類型使用不同的Comparator
實現。在Java SE 8(!)中,匿名內部類,枚舉和lambda表達式是實現Comparator
和其他無狀態函數類對象的好方法。
您可以用Collections.reverseOrder反轉。
是的。自定義Comparator
是一個很好的方法。
正如@Tom和@Puce所提到的那樣,您可以在Comparator
上實時運行reverse the order。
這是一種方式。但是,如果它是一種默認方式,它確實是有意義的。考慮以下客戶類。通常,您總是按名稱對客戶進行排序。但有時候,你想按他們的信用額度來排序。
爲了方便起見,實施Comparable是有意義的。至少,您可以將比較器公開爲課程的最終組件,以便用戶可以輕鬆訪問它們,並且您可以相信它們是由課程作者編寫的(或者至少是熟悉該課程的人員)。 )
class Customer implements Comparable<Customer> {
public final Comparator<Customer> byCreditLimit = new Comparator<Customer>() {
public int compare(Customer c1, Customer c2) {
return c1.creditLimit.compareTo(c2.creditLimit);
}
public boolean equals(Object o) {
return o == this;
}
}
private String name;
private BigDecimal creditLimit;
public Customer(String name, BigDecimal creditLimit) {
this.name = name;
this.creditLimit = creditLimit;
}
public boolean equals(Object o) {
if(o instanceof Customer) {
Customer c = Customer(o);
return name.equals(c.name);
}
return false;
}
public int hashCode() {
return name.hashCode();
}
public int compareTo(Customer c) {
return name.compareTo(c.name);
}
}
你能說出爲什麼Comparable比Comparator更好嗎? – 2011-04-27 17:08:20
主要是爲了方便。這是一種說法:「大多數情況下,你會對這種類型的對象進行排序,你應該像這樣排序。」這只是一件少想的事情。想象一下,你是一個開發人員使用一個類。您希望將對象分類以加快查找速度。開發人員知道,通過對名稱進行排序,您應該可以獲得相對較好的分配,而按信用額度排序的效率會更低(批次可能具有相同的信用額度,但等於說明Set最多隻有一個給定名稱)。通過使用Comparable,作者可以提供默認比較機制。 – corsiKa 2011-04-27 17:16:27
如果一個類實現了Comparable,它表明它具有「自然順序」。好的樣品是例如數字類(Integer,Long),它們按包裝的數字排序。如果沒有「自然順序」,或者你想要的東西與「自然順序」不同 - >使用比較器 – Puce 2011-04-27 17:31:38
- 1. 比較自定義對象c#
- 2. 比較2個自定義對象 - C#
- 3. 自定義對象比較器
- 4. java對象比較
- 5. Java,比較對象
- 6. Java PriorityQueue自定義比較器
- 7. Java自定義比較不起作用
- 8. 比較兩個對象,java
- 9. 日期對象比較 - Java
- 10. 相等對象比較:JAVA
- 11. 的java org.json比較對象
- 12. 比較xml對象java
- 13. Java:比較對象值
- 14. 比較自定義類型
- 15. DISTINCT與自定義比較
- 16. Groovy自定義比較器
- 17. 自定義比較驗證
- 18. 自定義比較的ConcurrentSkipListMap
- 19. 自定義比較器使用單個對象
- 20. 設置自定義函數對象比較器c + +
- 21. jquery-比較基於用戶的自定義對象屬性Chocie
- 22. STL地圖自定義比較函數對象
- 23. Quickblox iOS - 比較自定義對象請求中的日期
- 24. 如何使用java比較器自定義排序/排序json對象?
- 25. IEquatable可以比較具有其他自定義對象的列表屬性的自定義對象嗎?
- 26. Java中的抽象對象比較
- 27. 比較對象
- 28. 比較對象
- 29. 比較對象
- 30. 比較對象
每種排序類型都有一個自定義的「比較器」,但是與「Collections.reverseOrder」相反:http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#reverseOrder(java .util.Comparator) – 2011-04-27 17:00:47