使用Comparable对多个排序条件进行Java排序对象

问题描述 投票:0回答:1

我最近开始学习Java。我在看Comparable和Comparator。我读到的一个区别是“当你有一个排序标准时,使用类似的界面,并且不止一个使用Comparator”。但对于Comparable,我可以使用多个排序标准,如下所示:

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建议用于单一排序标准?有人可以用一个例子来解释我吗?谢谢!

java comparator comparable
1个回答
1
投票

如果我们可以使用上述方法,为什么Comparable建议用于单一分类标准?

没有普遍接受的建议。

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


Comparable vs Comparator根本不是关于你是在比较一个还是多个值。

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

此接口对实现它的每个类的对象强加一个总排序。这种排序被称为类的自然排序,而类的compareTo方法被称为其自然比较方法。

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

关于比较的复杂性也没有。


无关:

不要使用整数减法计算compare / compareTo结果,因为如果两个值大于MAX_VALUE(数值溢出),它将失败。

在比较Integer.compare(x, y)值时(从Java 7开始可用),始终使用intLong.compare​(x, y)也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.