我一直在学习一些关于如何根据对象的属性对对象进行排序的教程。例如,如果我们有一个名为 person 的类,它有一个名为 name 的属性,我们只需实现 Comparable 接口(interface)并覆盖 compareTo。
但是,不同的教程会显示您在 compareTo 中编写的不同代码,例如这里是 one way :
public int compareTo(Object o) throws ClassCastException {
Date d = (Date)o; // If this doesn't work, ClassCastException is thrown
int yd = year - d.year;
int md = month - d.month;
int dd = day - d.day;
if (yd != 0) return yd;
else if (md != 0) return md;
else return dd;
但这里是 different way编写 compareTo 方法:
@Override
public int compareTo(Student1 o) {
return Integer.compare(grade, o.grade);
}
因此,我对编写正确的 compareTo 需要什么算法或公式感到非常困惑
最佳答案
这完全取决于接口(interface) Comparable
是如何实现的。
如果你在类里面看到
implements Comparable
那么第一个compareTo
方法是正确的。这是通过 Java 1.4 实现 Comparable
的方法,Java 1.4 是引入泛型 之前的最后一个版本。它实现了原始接口(interface)Comparable
(没有任何泛型)。
如果你在类里面看到
implements Comparable<Student1>
那么第二个compareTo
方法是正确的。在这种情况下,泛型通过在 compareTo
方法中提供参数类型来提供帮助。
两者都对,但第一个已经过时,第二个现在受到青睐。
关于java - Java 新手 - 如何编写用于排序的 compareTo 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21790347/