【问题标题】:Java ArrayList Collections sortJava ArrayList 集合排序
【发布时间】:2016-03-04 18:58:56
【问题描述】:

我已经看到一些关于在 Java 中出现错误的集合的排序问题。我显示的错误是这样的:

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);

【问题讨论】:

    标签: java arrays sorting arraylist


    【解决方案1】:

    类 Time 必须是 Comparable。

    Collections.sort(List) 期望类 T 实现 Comparable 接口。如果您使用了许多内置类,您不会发现问题,但是对于自定义类,sort 不知道如何对它们进行排序。因此,通过实现 Comparable 接口,您可以定义方法 compareTo。

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

    【讨论】:

    • 这个可以,我正在解释答案。
    • @intboolstring 这几乎肯定是答案。他为什么不把它作为一个发布?
    • @intboolstring 你太快了。感谢您成为一名优秀的 * 社区成员。我只是在我的 ide 中输入一个示例类并撰写。 :)
    • 感谢您在回答中添加更多内容。绝对是我 +1。
    • @Buddha 我花了一些时间来写逻辑。这正是我所需要的。
    【解决方案2】:

    ListArrayList 中的类类型必须实现接口comparable 并正确覆盖compareTo(...) 方法,

    你是不是违反了这个约定,不实现接口。类集合没有有效的标准/规则来比较/排序您的列表,因此您的编译器会抱怨...

    【讨论】:

      【解决方案3】:

      我不认为 ArrayList 是这里的问题。例如:

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

      工作得很好。 列表的内容必须是可比较的,这样才能进行排序。在这种情况下,Time 类和任何子类型都必须实现 Comparable。

      【讨论】: