2012-09-12 83 views
19

我知道,比較和compareTo返回一個int值。compareTo和compare比較工作如何?

例如:

Returns 
0 if a equal b 
-1 if a < b 
+1 if a > b 

sort方法使得要麼compareTocompare()方法的調用。但sort方法在比較時如何排列listcompareTo返回int值。 ?什麼是comparecompareTo返回一個int值進行排序後運行的背景情況如何呢sort方法使用整型值(-101)從comparecompareTo

+1

http://en.wikipedia.org/wiki/Sorting_algorithm或如果你想java特定:[TimSort](http://en.wikipedia.org/wiki/Timsort) – amit

回答

2

this document返回給它:

  • a.compareTo(b)
    可比較的接口。比較值並返回一個int值,該值指示值是否小於,等於或大於。 如果您的類對象具有自然順序,請實現Comparable接口並定義此方法。所有具有自然順序的Java類都實現此(String,Double,BigInteger,...)。

  • compare(a, b)
    比較器接口。比較兩個對象的值。這是作爲Comparator接口的一部分實現的,典型的用法是定義一個或多個實用類的小實用程序類,以傳遞給sort()等方法或用於排序數據結構(如TreeMap和TreeSet)。您可能需要爲以下內容創建比較對象:

    • 多重比較。提供幾種不同的方法來排序。例如,您可能想按名稱,ID,年齡,高度等對Person類進行排序。您將爲每個類定義一個Comparator,以傳遞給sort()方法。
    • 系統類爲您無法控制的類提供比較方法。例如,你可以定義一個字符串比較器,按比較它們的長度。
    • 策略模式爲了實現策略模式,這是在要表示的算法爲對象,可以作爲參數傳遞,保存在數據結構中的情況下,等
4

一般情況下的排序算法是基於比較。如果您在ab之間進行比較 - 正好有3種可能性:a == b,a > b,a < b

compare()compareTo()方法提供了這些信息。

現在,使用這些信息我們設計了許多sorting algorithms,從天真bubble sort開始,有些更進步,如quick sort。每種方法都提供了一些與分類問題不同的方法。

Java爲其排序實現選擇了TimSort算法。

作爲一個練習,你可以設計自己的排序算法。你可以使用compare()方法找到數組的最大元素嗎?當你發現它應該在哪裏?接下來你應該做什麼?


(1)好了,想起來了自己,但它已經存在,實際上:)

18

如果兩個元素(A,B)進行比較已經在正確的順序,compare(a, b)a.compareTo(b)都返回一個值爲<= 0,所以沒有什麼必然發生。

如果它們的順序不正確,返回值爲> 0,表示它們必須互換。

+6

+1最佳答案IMO,考慮你*實際上*回答了OP的問題,而不是僅僅複製和粘貼文檔。 –