【问题标题】:regarding compareTo() method in java关于java中的 compareTo() 方法
【发布时间】:2016-03-11 16:29:08
【问题描述】:

我对Java中compareTo()方法的工作原理很困惑。在通过Collections.sort() 方法传递列表时,实际比较哪些对象以返回负值、正值或零值?

【问题讨论】:

  • 请参考this SO question
  • read the docs了吗?
  • 全部。您需要查看所有值以对列表进行排序(不一定将所有值与其他所有值进行比较)。
  • 您对列表进行排序,以便比较该列表的元素。
  • compareTo method java的可能重复

标签: java


【解决方案1】:

用于排序。所以所有的元素都会进行比较,最终用于排序。

【讨论】:

【解决方案2】:

假设您的列表是List<Integer>,其值为[5, 7, 3]Integer 有一个compareTo()

确切的排序方法取决于算法,但让我们尝试一个简单的冒泡排序。

  • 5.compareTo(7)
  • 7.compareTo(3) > 0: 交换元素

列表现在是[5, 3, 7]

  • 3.compareTo(5) > 0: 交换元素

列表现在为[3, 5, 7],排序已完成。

在这个特定示例中,所有元素最终都与所有其他元素进行了比较。这种情况很少发生,因为智能排序算法可以最大限度地减少必要的比较次数。

【讨论】:

    【解决方案3】:

    所有这些,而且大多数都是几次。你的问题真的是“排序是如何工作的”,这对于 * 来说太宽泛了。

    然而,一个简化的答案是,算法比较元素对,每次调用compareTo(),以确定哪个“更小”(对于“更小”的某些定义)。好的排序算法会尽量减少比较次数,但每个元素都必须与其他一些元素进行比较(该数字通常 > 1)。

    compareTo() 存在的原因是它允许您决定“更小”和“更大”对您的对象意味着什么,让您可以根据需要对它们进行排序。

    【讨论】: