2016-03-11 64 views
-3

我對使用Java的compareTo()方法的工作原理非常困惑。在通過Collections.sort()方法傳遞一個列表時,哪些對象實際上被比較以返回負值還是正值或零值?關於java中的compareTo()方法

+0

請參考[這個SO問題](http://stackoverflow.com/questions/18754490/using-compareto-and-collections-sort) – Prashant

+0

你是否[閱讀文檔](https://docs.oracle。 COM/JavaSE的/ 8 /文檔/ API /爪哇/郎/ Comparable.html#的compareTo-T-)? – resueman

+0

所有這些。您需要查看所有值來對列表進行排序(只需將所有內容與其他所有內容進行比較)即可。 –

回答

0

它用於分類。所以所有元素都進行比較,最終用於分類。

+0

https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html這是一個例子。 – Karen

0

所有這些,其中大部分是幾次。你的問題真的是「如何排序工作」,這對於StackOverflow來說太寬泛了。

但是,一個簡單的答案是,該算法比較每對元素,每次調用compareTo(),以決定哪一個是「較小」(對於「較小」的某些定義)。良好的排序算法儘量減少比較次數,但每個元素都必須與其他一些數字(其中該數字通常大於1)進行比較。

compareTo()存在的原因是,它允許您決定對象的「較小」和「較大」含義,允許您根據需要對其進行排序。

0

假設您的清單是List<Integer>,其值爲[5, 7, 3]IntegercompareTo()

排序的確切方法取決於算法,但讓我們嘗試一個簡單的bubblesort。

  • 5.compareTo(7) < 0:沒有必要
  • 7.compareTo(3)> 0的動作:交換元素

名單現在是[5, 3, 7]

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

名單現在是[3, 5, 7]和排序已經完成。

在這個特定的例子中,所有元素最終與所有其他元素進行比較。很少出現這種情況,因爲智能排序算法可以最小化必要的比較次數。