2016-03-04 97 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。