我最近开始学习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建议用于单一排序标准?有人可以用一个例子来解释我吗?谢谢!
如果我们可以使用上述方法,为什么
Comparable
建议用于单一分类标准?
没有普遍接受的建议。
无论你在哪里读到的都是错的。
Comparable
vs Comparator
根本不是关于你是在比较一个还是多个值。
对象可以(最多)具有一个自然顺序。如果是,则使用Comparable
实现该自然顺序。它实际上写在Comparable
的javadoc中:
此接口对实现它的每个类的对象强加一个总排序。这种排序被称为类的自然排序,而类的
compareTo
方法被称为其自然比较方法。
无论对象是否具有自然顺序,(替代)排序都可以使用Comparator
来实现。
关于比较的复杂性也没有。
无关:
不要使用整数减法计算compare
/ compareTo
结果,因为如果两个值大于MAX_VALUE
(数值溢出),它将失败。
在比较Integer.compare(x, y)
值时(从Java 7开始可用),始终使用int
。 Long.compare(x, y)
也是如此。