我知道我们使用类似的函数来排序对象的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时会出错?
答案 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
,那么错误输出要比以半随机顺序对列表进行静默排序要好得多。