2016-03-04 183 views
1

我已經看到有關Java中存在錯誤的集合類型的幾個問題。我顯示的錯誤是這樣的:Java ArrayList集合排序

在類型Collections方法sort(List<T>)是不適用的參數(ArrayList<Time>

我已經進口java.util.Collections中和ArrayList。我還輸入了我打來的課程。這裏是我的代碼:

在課堂上被稱爲來自:

private ArrayList<Time> times; 

... 

public ArrayList<Time> getTimes() { 
     return this.times; 
    } 

在課堂上,我調用數組列表:

public class TimeTUI { 
    private Scanner scan; 
    private TimeManager timeManager; 

... 

private ArrayList<Time> getSortedTimes() { 
    ArrayList<Time> sortedTimes = this.timeManager.getTimes(); 
    Collections.sort(sortedTimes); 
    return sortedTimes; 
} 

該錯誤是出現在一行顯示:

Collections.sort(sortedTimes); 

回答

7

類時間必須是可比較的。

Collections.sort(List)期望類T實現Comparable接口。如果你已經使用了許多內置的類,你不會發現問題,但對於自定義類,排序不知道如何對它們進行排序。因此,通過實現Comparable接口,您可以爲方法compareTo定義。

public class Time implements Comparable { 
    public int compareTo(Object o) { 
    // provide your logic of how to sort Time objects. 
    } 
} 
+0

這可以,我正在解釋答案。 – Buddha

+1

@intboolstring這幾乎肯定是答案。爲什麼他不把它作爲一個發佈? –

+0

@intboolstring你太快了。我非常感謝你成爲一名優秀的計算器社區成員。我只是在我的IDE中輸入一個示例類並撰寫。 :) – Buddha

2

ListArrayList你的類類型必須實現的接口comparable,並覆蓋適當的compareTo(...)方法,

是你違反本合同和不實現接口。類集合沒有一個有效的標準/規則比較/排序你的列表,因此你的編譯器會抱怨...

2

我不認爲這是ArrayList是這裏的問題。例如:

ArrayList<String> names = new ArrayList<>(); 
... 
Collections.sort(names); 

工作得很好。 列表的內容必須可比,以便排序可以工作。在這種情況下,Time類和任何子類型必須實現Comparable。