Java的新手-如何编写compareTo方法进行排序

我一直在研究一些有关如何根据对象的属性对对象进行排序的教程.例如,如果我们有一个名为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

上一篇:Linux内核装载和启动一个可执行程序


下一篇:c#-用数组模拟4个象限