java - Java 新手 - 如何编写用于排序的 compareTo 方法

标签 java android sorting

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

相关文章:

java - 递归函数java

java - Android 上的错误 java.lang.NoClassDefFoundError : org. firebirdsql.jdbc.FBDataSource

android - 将 View 本身移动到动画的结束位置

android - 将同一应用程序的免费和付费版本发布到 Android Market 的选项和最佳做法

python - Pandas:对列类别中的每一行进行排序/百分位数

java - 使用 Selenium WebDriver 滚动网页内的特定 DIV

java - hibernate 标准限制 :- how to fetch current and last month data

android - 当我按下生成签名的 apk 时,我只得到 app-release-unaligned.apk

c++ - 在c++中合并8个排序列表,我应该使用哪种算法

javascript - nodejs 意外结果中的 localeCompare 选项