我对Java中compareTo()
方法的工作原理感到非常困惑。在通过Collections.sort()
方法传递列表时,哪些对象实际上被比较以返回负值或正值或零值?
答案 0 :(得分:0)
用于排序。因此,所有元素都进行了比较,最终用于排序。
答案 1 :(得分:0)
所有这些,其中大多数都是好几次。您的问题实际上是"排序工作如何" ,这对于StackOverflow而言过于宽泛。
然而,简化的答案是该算法在每次调用compareTo()
时比较元素对,以决定哪一个是"更小" (对于"较小"的某些定义)。良好的排序算法尽量减少比较次数,但每个元素必须与其他一些元素进行比较(其中该数字通常> 1)。
compareTo()
存在的原因是它允许您决定什么"较小的"并且"更大"对您的对象意味着什么,允许您根据需要对它们进行排序。
答案 2 :(得分:0)
说出您的列表是List<Integer>
,其值为[5, 7, 3]
。 Integer
有一个compareTo()
。
确切的排序方法取决于算法,但让我们尝试一个简单的bubblesort。
5.compareTo(7)
&lt; 0:无需采取行动7.compareTo(3)
&gt; 0:交换元素列表现在是[5, 3, 7]
。
3.compareTo(5)
&gt; 0:交换元素列表现在是[3, 5, 7]
,排序已经完成。
在此特定示例中,所有元素最终都与所有其他元素进行比较。这种情况很少发生,因为智能排序算法可以最大限度地减少必要的比较次数。