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 - 在 map 中插入列表作为值

java - 如何查找哪个应用程序创建了每个c3p0连接池?

java - 使用 Mockito 测试 Kotlin 类会导致 MissingMethodInvocationException

java - HttpURLConnection在第一次运行时被对等方重置…在立即重新运行时起作用

objective-c - iOS:如何使用 NSSortDescriptor 对关系中的值进行排序?

java - Xml 签名在 .NET 中验证正常,但在 Java 中失败

java - Java OR运算符变得疯狂

android - JVoiceXML解释器的Android配置

java - 使用数组列表按升序和降序排列字符串

javascript - 有没有办法像我正在尝试对两个并行数组进行排序