本文介紹了Java使用具有多個(gè)排序條件的可比對象進(jìn)行排序的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我最近開始學(xué)習(xí)Java。我看的是可比性和可比性。我讀到的不同之處之一是”當(dāng)你有一個(gè)分類標(biāo)準(zhǔn)時(shí),使用可比較的接口,而對于多個(gè)使用比較器”。
但對于可比性,我也可以使用多種分類標(biāo)準(zhǔn),如下所示:
class Employee implements Comparable<Employee>{
public int empID;
public int empStartDate;
public int compareTo(Employee empObj){
int result = this.empID - empObj.empID;
if(result == 0){
result = this.empStartDate - empObj.empStartDate;
}
return result;
}
}
我理解他們還有其他不同之處。但我有點(diǎn)糾結(jié)于這個(gè)區(qū)別(單一和多個(gè)分類標(biāo)準(zhǔn))。
如果我說錯(cuò)了,請糾正我。如果我們可以使用上述方法,為什么推薦單一分類標(biāo)準(zhǔn)使用可比性?有人能舉個(gè)例子給我解釋一下嗎?謝謝!
推薦答案
如果我們可以使用上述方法,為什么建議使用
Comparable
單一排序條件?
對此沒有普遍接受的建議。
無論您在哪里閱讀,都是錯(cuò)誤的。
Comparable
vsComparator
根本不是比較一個(gè)或多個(gè)值的問題。
一個(gè)對象最多可以有一個(gè)自然順序。如果是,則使用Comparable
實(shí)現(xiàn)該自然順序。它實(shí)際上是用Comparable
:
的javadoc編寫的
此接口對實(shí)現(xiàn)它的每個(gè)類的對象強(qiáng)制進(jìn)行總排序。這種排序稱為類的自然排序,類的
compareTo
方法稱為其自然比較方法。
無論對象是否具有自然順序,(備選)排序都可以使用Comparator
實(shí)現(xiàn)。
兩者都與正在進(jìn)行的比較的復(fù)雜性無關(guān)。
無關(guān):
請勿使用整數(shù)減法計(jì)算compare
/compareTo
結(jié)果,因?yàn)槿绻麅蓚€(gè)值大于MAX_VALUE
(數(shù)值溢出),則計(jì)算將失敗。
在比較int
值(從Java 7開始提供)時(shí),始終使用Integer.compare(x, y)
。Long.compare?(x, y)
相同。
這篇關(guān)于Java使用具有多個(gè)排序條件的可比對象進(jìn)行排序的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,