首页 > 解决方案 > 为什么当 Comparator.compare 相等时我们需要返回 0

问题描述

我知道当实现 Comparator 接口的比较方法时,我们需要返回

我的问题是为什么我们需要在两者相等时返回 0?用例是什么或在哪里使用?如果我们考虑排序时 o2 大于 o1 或 o2 等于 o1 不会改变它的位置。任何人都可以来解释这个实际用例吗?

Java 文档说

比较它的两个参数的顺序。返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个。

这是否意味着 return -1 或 return 0 具有相同的影响?

零或正整数

 @Override
    public int compare(Test f1, Test f2) {
        if (f1.getId() > f2.getId()) {
            return 1;
        } else if (f1.getId() < f2.getId()) {
            return -1;
        } else {
            return 0;
        }

    }

标签: javasortingcollectionscomparator

解决方案


如果在被比较的两个值相等时返回 -1,compare(f1,f2)并且compare(f2,f1)都将返回-1. 这意味着您的元素的顺序将不一致。它可以破坏一些排序算法。

这就是为什么一般合同compare要求:

sign(compare(f1,f2)) = -sign(compare(f2,f1))

这意味着当两个值相等时,您必须返回 0。


推荐阅读