Java collection 排序

Java collection sorting

当我 运行 下面的代码时,Collection.sort(l) 将抛出下面的异常。

Exception in thread "main" java.lang.ClassCastException: learning.CollectionSort cannot be cast to java.lang.Comparable

public class CollectionSort {  
    public static void main (String[] args){
        List l = new ArrayList();
        CollectionSort obj1 = new CollectionSort();
        CollectionSort obj2 = new CollectionSort();
        l.add(obj1);
        l.add(obj2);
        Collections.sort(l);
        for (int i = 0; i < l.size(); i++){
            System.out.println(l.get(i));
        }
    }
}

这是因为我们必须实施可比较或比较器来对自定义 object 进行排序。通常我们将在 object 中有用于排序的属性。

但是在上面的代码中,我们在这个class中没有属性。那么可以对上面的列表进行排序吗?请分享您的想法。

But in the above code, we have no properties in this class. So is possible to sort the above list?

是的,您可以编写一个 Comparator,根据哈希码 (hashCode()) 或字符串值 (toString()) 进行排序,然后使用它对列表进行排序...

Collections.sort(l, new MyComparator()).

但不清楚这样做会带来什么好处,因为生成的订单没有特别的含义。事实上,如果您可以自由选择任何排序依据,那么为什么不按照列表中的索引对列表元素进行排序呢?然后你的列表总是在不调用任何方法的情况下被简单地排序。

CollectionSort class 上实施 Comparable Interface

创建 Comparator 实现 class 作为参数传递给 Collections.sort(collection,comparatorReference);

Collections class 文档。