使用集合进行ArrayList排序

时间:2015-04-25 00:14:58

标签: java sorting arraylist collections

我知道我们使用类似的函数来排序对象的ArrayList,以根据对象的某个属性进行排序。 但我总是想知道何时直接在对象的ArrayList上调用sort,例如:Collections.sort(arraylist); 它给出的错误是你无法排序,但实际上当你打印一个对象时,例如:

Instances in1=new Instances();
ArrayList  al=new ArrayList();
al.add(in1);
System.out.println(al.get(0));

你得到输出:

  

实例@ 45a8123b

是对象的id。

因此,如果我们在ArrayList上调用排序,那么它可以根据id对对象进行排序。 那么,为什么我们在排序对象的ArrayList时会出错?

1 个答案:

答案 0 :(得分:3)

如果您希望在不提供比较器的情况下对对象进行排序,请通过实现Comparable接口来定义自然顺序:

class Instances implements Comparable<Instances> {

    ....

    @Override
    public int compareTo(Instances other) {
        return Integer.compare(
                System.identityHashCode(this), 
                System.identityHashCode(other)
        );
    }
}

现在ArrayList<Instances>可以通过身份哈希码进行排序(但实际上这是荒谬的)。

这样你实际上必须刻意去做。 Collections.sort不承担可能出错的行为是正确的。如果你没有实现Comparable并且没有提供Comparator,那么错误输出要比以半随机顺序对列表进行静默排序要好得多。