java - 为什么当我返回 object1-object2 时,自制比较起作用

标签 java compare

我想了解为什么 o2 - o1 返回给我一个排序列表,我不明白其背后的逻辑。 这是我做过的一个方法,但我不明白为什么这个 o2-o1 对我的 ArrayList 进行排序。

我尝试在互联网上查找但没有找到任何答案。

    ArrayList<Integer> array = new ArrayList<Integer>();
    array.add(1);
    array.add(3);
    array.add(2);
    array.add(5);
    array.add(4);
    array.add(6);
    array.sort(new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            // TODO Auto-generated method stub
            return o2 - o1;
        }
    });
    for (int s : array) {
        System.out.println(s);
    }

最佳答案

ArrayList继承sort来自列表。它需要一个 Comparator 来通过其 compare 比较列表条目。方法。 compare 的 JavaDoc 说:

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

这就是你的代码的作用。 o2 - o1 自动将 Integer 实例拆箱为 int,然后从 中减去 o1 值o2 值。如果 o1 大于 o2,则结果为负整数;如果它们相同,则结果为零;如果 o1 为正整数,则结果为正整数。小于 o2

sort 使用值对重复调用比较器的 compare,并使用这些返回值对列表进行排序。

关于java - 为什么当我返回 object1-object2 时,自制比较起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391280/

相关文章:

java - 在java中播放和查找音频文件

java - 将 PEM 转换为 PKCS12 并导入到 Java keystore

java - 尝试改变屏幕边缘的速度不起作用

python - 有没有办法有效地比较 python 中的两个字典列表?

swift - 如何比较可选词典? swift 3

java - 如何使用鼠标监听器调用另一个类?

java - Java 工具创建的 WSDL 文件的 WCF 序列化问题

c# - 比较两个对象列表的新的、更改的、更新的特定属性

Java:查找两个数据源中出现了多少个单词?

c - 蜂鸣命令正在破坏我的功能