Java 使用 Comparable 和多个排序标准对对象进行排序

标签 java comparator comparable

我最近开始学习Java。我正在研究比较器和比较器。我读到的区别之一是“当你有一种排序标准时,使用可比较的接口(interface),并且对于多个使用比较器”。 但对于可比较,我也可以使用多个排序标准,如下所示:

class Employee implements Comparable<Employee>{
    public int empID;
    public int empStartDate;

    public int compareTo(Employee empObj){
        int result = this.empID - empObj.empID;
        if(result == 0){
            result = this.empStartDate - empObj.empStartDate;
        }
        return result;
    }
}

我确实理解他们还有其他差异。但我有点坚持这种差异(单个和多个排序标准)。 如果我错了,请纠正我。如果我们可以使用上述方法,为什么推荐使用 Comparable 作为单一排序标准?有人可以举个例子解释一下吗?谢谢你!

最佳答案

Why is Comparable recommended for single sorting criteria if we can do using above approach?

对此没有普遍接受的建议。

无论你在哪里读到这都是错误的。

<小时/>

ComparableComparator根本不在于您是在比较一个值还是多个值。

一个对象最多可以有一个自然顺序。如果是,则使用 Comparable 实现自然顺序。它实际上写在Comparable的javadoc中:

This interface imposes a total ordering on the objects of each class that implements it. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method.

无论对象是否具有自然顺序,(替代)排序都可以使用Comparator来实现。

两者都与进行比较的复杂性无关。

<小时/>

不相关:

不要使用整数减法来计算 compare/compareTo 结果,因为如果两个值相差超过 MAX_VALUE(数字溢出)。

始终使用Integer.compare(x, y)比较 int 值时(自 Java 7 起可用)。 Long.compare​(x, y) 相同.

关于Java 使用 Comparable 和多个排序标准对对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54797990/

相关文章:

java - App Engine 和数据存储区的 API 是什么?

java - 如何构建一个可以发布数字的 REST 计算器?

java - 使用比较器对数组进行排序

Java 8 : Comparator comparingDouble type mismatch

Java 泛型 : compareTo and "capture#1-of ?"

java - 类中的多个可比较

java - Statement.setQueryTimeout 不适用于 Oracle 18c jdbc 驱动程序

java - 如何在代码中执行osgi命令

java - 按降序对特定成员/状态的对象列表进行排序

Java - 如何以多种方式对对象进行排序 : Arrays. sort(), Comparable<T>