java - ArrayList使用集合排序

标签 java sorting arraylist collections

我知道我们使用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/

相关文章:

python - 将字符串与数字进行比较,解码 radio 呼号

java - 在这种情况下,ArrayList 是否会导致竞争条件或死锁?

java - 使用 iText 创建不可见的 PDF 对象

java - 简单的java程序出错

java - 从 Java 访问 Firefox 的证书信任库

java - 使用不同的键对列表进行排序

c++ - 如何以稳定的方式进行部分排序

java - ArrayList 迭代相同的数据

java - 尝试将整数数组列表转换为原始类型 int[]

java - Java 中的 TLS 性能?