Collections.sort()不适用于自定义对象

shu*_*rok 2 java sorting collections object

我正在尝试对我的列表进行排序,但这个不起作用.方法collections.sort()什么都不做.

public boolean schedule(){
    List<Task> keys = new ArrayList<Task>(g.tasks.keySet());
    for(int i = 0; i<keys.size();i++){
        System.out.println(keys.get(i).getSize());
    }
    Collections.sort(keys);
    for(int i = 0; i<keys.size();i++){
        System.out.println(keys.get(i).getSize());
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这是Task类中的compareTo()方法:

public int compareTo(Task t1) {
    Integer csize = new Integer(t1.size);
    int cmp = csize.compareTo(t1.size);

    return cmp;
}
Run Code Online (Sandbox Code Playgroud)

这种方法有什么问题?

Hov*_*els 5

collections.sort不适用于自定义对象

确实如此,但在你的情况下不会因为你的compareTo方法被破坏了.您将t1的大小与自身进行比较,而不是将其大小与this

你有:

public int compareTo(Task t1) {
    Integer csize = new Integer(t1.size);  // get t1's size
    int cmp = csize.compareTo(t1.size);  // ???? compare with t1's size ???

    return cmp;
}
Run Code Online (Sandbox Code Playgroud)

您需要将其更改为:

public int compareTo(Task t1) {
    return Integer.compare(this.size, t1.size);
}
Run Code Online (Sandbox Code Playgroud)

所以现在你要将参数的大小与当前对象的大小进行比较.