簡體   English   中英

為什么Java Collections Framework提供了兩種不同的排序方式?

[英]Why does the Java Collections Framework offer two different ways to sort?

如果我有一個我想要排序的元素列表,Java提供了兩種方法來解決這個問題。

例如,假設我有一個Movie對象列表,我想按標題對它們進行排序。

我可以這樣做的一種方法是通過調用靜態java.util.Collections.sort()方法的單參數版本,並將我的電影列表作為單個參數。 所以我會調用Collections.sort(myMovieList)。 為了使其工作,必須聲明Movie類以實現java.lang.Comparable接口,並且必須在此類中實現所需的方法compareTo()。

另一種排序方法是使用影片列表和java.util.Comparator對象作為參數調用靜態java.util.Collections.sort()方法的雙參數版本。 我會調用Collections.sort(myMovieList,titleComparator)。 在這種情況下,Movie類不會實現Comparable接口。 相反,在構建和維護影片列表本身的主類中,我將創建一個實現java.util.Comparator接口的內部類,並實現一個必需的方法compare()。 然后我將創建此類的實例並調用sort()的雙參數版本。 第二種方法的好處是您可以創建無限數量的這些內部類比較器,因此您可以以不同的方式對對象列表進行排序。 在上面的示例中,您可以讓另一個Comparator按照制作電影的年份進行排序。

我的問題是,為什么麻煩學習兩種方式在Java中進行排序,當Collections.sort()的雙參數版本執行第一個單參數版本所做的所有事情時,還有一個額外的好處就是能夠對列表的元素進行排序基於幾個不同的標准? 在編碼時必須記住這一點。 你有一個基本機制,用Java來排序列表來了解。

一個是簡潔應該是一個常見的案例( Effective Java 2nd Edition,Item 12:考慮實現Comparable )。 正如您所指出的,另一個是靈活性和通用性。

相關問題

這取決於誰控制訂購。 如果對象的排序是對象的實現細節,則Comparable更合適。 如果對象的排序由調用者控制,則Comparator更合適。

我不確定我覺得這很奇怪。 我有一個要排序的東西列表,它們有一個像數字一樣的自然順序。 我真的希望我必須告訴API如何比較數字嗎? 我不會直觀地尋找一個雙方法。 因此可比較存在。

但是,當然你可以而且應該能夠定義不同的順序,因此另一種方法。 例如,即使數字具有自然順序,我仍然可能需要不同的順序:例如,按值降序排序。 因此比較者存在。

當然,有些東西沒有像Fruit這樣的自然順序,但你可能仍然希望訂購它們的列表。 比如,比較者。

暫無
暫無

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

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