我知道我们使用Comparable函数对对象的ArrayList进行排序,以根据对象的某个属性进行排序。
但我总是想知道当我们直接对对象的 ArrayList 调用排序时,例如:Collections.sort(arraylist);
它给出了您无法排序的错误,但实际上当您打印对象时,例如:
Instances in1=new Instances();
ArrayList al=new ArrayList();
al.add(in1);
System.out.println(al.get(0));
你得到输出:
Instances@45a8123b
这是一个对象的 id。
因此,如果我们对 ArrayList 调用排序,那么它可以根据 id 对对象进行排序。 那么,为什么我们在对对象的 ArrayList 进行排序时会出错?
最佳答案
如果您希望对象在不提供比较器的情况下可排序,请通过实现 Comparable
来定义自然排序接口(interface):
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
,出错比只是默默地以半随机顺序对列表进行排序要好得多。
关于java - ArrayList使用集合排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29859530/