【问题标题】:dosent understand how sort works了解排序的工作原理
【发布时间】:2016-05-07 16:43:17
【问题描述】:

我试图了解可比较的 compareTo 方法如何对输入进行排序。下面是实现的compareTo方法:

@Override
public int compareTo(Name n) {
    int lastCmp = lastName.compareTo(n.lastName);
    return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
}

Collections.sort 方法的输入数组是:

Name nameArray[] = {
    new Name("John","Smith"),
    new Name("Karl","Ng"),
    new Name("Jeff","Smith"),
    new Name("Tom","Rich")
};
List<Name> names = Arrays.asList(nameArray);
Collections.sort(names);

我不明白 compareTo 方法采用了哪些值。 (n.lastName 和 lastname)按什么顺序?

【问题讨论】:

  • Collections 排序方法根据您的 compareTo 方法对您的 Name 数据进行排序。 compareTo 方法根据需要对两个 Name 实例调用多次,直到对所有 Name 实例进行排序。在您的 4 个实例示例中,compareTo 方法可以被调用多达 6 次。

标签: java sorting collections comparable


【解决方案1】:

Collections.sort() 方法根据集合长度和类型使用不同的算法进行排序(我认为...)

如果对象分别小于、等于或大于,则 compareTo 方法应返回负数、0 或正数。 lastName 变量是指Name 类中的Last Name,由firstName:String 和lastName:String 组成。

该方法首先将 lastName(String 类型的对象)与传递的对象“n”(Name 类型)的 lastName 进行比较。如果它不同于 0(表示不等于),则返回该值。如果相等,则比较名字并返回。

所以它只是比较两个字符串(名称对象的名字和姓氏)。

【讨论】:

  • public static Comparator StuRollno = new Comparator(){ public int compare(Student2 s1, Student2 s2){ int rollno1 = s1.getRollno(); int rollno2 = s2.getRollno(); //升序返回rollno1-rollno2; }};在这段代码中,我怎么知道 rollno1-rollno2;按升序或降序排序,因为我不知道 s1 和 s2 是什么,因为收集算法不同?
  • @user2892493: o1 - o2 是升序,o2 - o1 是降序,假设 o1 和 o2 是整数。编写 Java 排序方法的人非常聪明,并且在编写代码时考虑了您的所有顾虑。这是一个实验。编写您自己的排序方法不使用 compareTo 方法或等效方法。完成实验后告诉我们。
  • 吉尔伯特:我不确定我是否理解你所说的。如何在不使用 compareTo 方法的情况下编写字符串排序方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 2012-12-11
  • 2011-02-18
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多