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 文档。
当我 运行 下面的代码时,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 文档。