我一直在研究一些有关如何根据对象的属性对对象进行排序的教程.例如,如果我们有一个名为person的类,它具有一个名为name的属性,则只需实现Comparable接口并覆盖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所需的算法或公式完全感到困惑
解决方法:
这完全取决于如何实现接口Comparable.
如果在课堂上你看到
implements Comparable
那么第一个compareTo方法是正确的.这是通过Java 1.4实现可比性的方法,Java 1.4是引入泛型之前的最新版本.它正在实现Raw接口Comparable(没有任何泛型).
如果在课堂上你看到
implements Comparable<Student1>
那么第二个compareTo方法是正确的.在这种情况下,泛型可以通过在compareTo方法中提供参数的类型来提供帮助.
两者都是正确的,但第一个已过时,第二个现在已受青睐.
> Comparable
javadocs
> Java generics tutorial