compareTo和compare如何工作?

vij*_*jay 24 java

我知道比较并compareTo返回一个int值.

例如:

Returns
0 if a equal b
-1 if a < b
+1 if a > b
Run Code Online (Sandbox Code Playgroud)

sort方法调用其中一个compareTocompare()方法.但是sort方法如何安排list比较或compareTo返回int值.什么是在a comparecompareTo返回int值之后运行的背景场景?如何sort使用返回的int值(-10or 1)comparecompareTo

use*_*421 19

如果被比较的两个元素(a,b)已经是正确的顺序,compare(a, b)并且a.compareTo(b)两者都返回一个值<= 0,那么就不会发生任何事情.

如果它们的顺序不正确,则返回值为> 0,表示它们必须互换.

  • +1最佳答案IMO,考虑到你*实际上*回答了OP的问题,而不是仅仅复制和粘贴文档. (6认同)

ash*_*thi 2

阅读此文档

  • a.compareTo(b):
    类似的接口。比较值并返回一个 int 值,指示比较的值是小于、等于还是大于。如果您的类对象具有自然顺序,请实现 Comparable 接口并定义此方法。所有具有自然排序的 Java 类都实现了这一点(String、Double、BigInteger,...)。

  • compare(a, b)
    比较器接口。比较两个对象的值。这是作为 Comparator 接口的一部分实现的,典型用途是定义一个或多个实现此功能的小型实用程序类,以传递给 sort() 等方法或通过对 TreeMap 和 TreeSet 等数据结构进行排序来使用。您可能想要为以下对象创建一个 Comparator 对象:

    • 多重比较。提供几种不同的方法来对某些内容进行排序。例如,您可能想按姓名、ID、年龄、身高等对 Person 类进行排序,您可以为每个类定义一个比较器以传递给 sort() 方法。
    • 系统类 为您无法控制的类提供比较方法。例如,您可以为字符串定义一个比较器,按长度比较它们。
    • 策略模式 实现策略模式,在这种情况下,您希望将算法表示为可以作为参数传递、保存在数据结构等中的对象。