Collections.sort和Object []

时间:2015-04-02 18:45:04

标签: java

所以只需编写一个抽象类和接口程序。我的代码到目前为止:

package lesson8;

import java.util.Collections;

public class ShapeTest {

 public static void main(String[] args) {
    Object[] shape = {new Square(4),
            new Rectangle(3, 2), 
            new RightTriangle(5,2), 
            new Square(2),
            new RightTriangle(2, 4),
            new Plus(3)};  
    Collections.sort(shape);
    }

}

我的问题是,为什么Collection.sort()不能与Object []一起使用?我怎么能让它发挥作用?谢谢!

4 个答案:

答案 0 :(得分:4)

您需要使用Arrays.sort()对数组进行排序(就地)。而且,没有&#34;自然&#34;排序Object,因此您必须将Comparator<Object>传递给带有比较器的Arrays.sort()的重载版本,除非Object全部实现Comparable根据{{​​3}},所有人都可以相互比较。

答案 1 :(得分:1)

首先,Collections.sort()期望Collection作为参数,而不是数组。对于数组,您有Arrays.sort()

其次,为了使Collection.sort()Arrays.sort()分别适用于CollectionObject的数组,所有这些对象必须与每个对象相当其他 - 他们必须实现Comparable界面,而e1.compareTo(e2)不得为ClassCastException或数组的每两个元素抛出Collection

答案 2 :(得分:0)

您还可以使用apache commons beanutils中的 BeanComparator ,如下所示:

Collections.sort(personList, new BeanComparator("name"));

Example

答案 3 :(得分:0)

Collections.sort通过调用数组中对象的compareTo方法来工作,以确定对象的自然顺序。但是,类Object没有定义的compareTo方法,因此sort方法无法知道正确的顺序是什么。因此,它无法对列表进行排序。

如果要使用Collections.sort对列表进行排序,请确保所有包含的对象都定义了compareTo方法。