2011-02-28 35 views
4

我剛剛發現了這樣的說法:「通過比較最可能發生差異的項目,可以大大提高compareTo的性能」。這是真的嗎?如果是這樣,爲什麼?比較是否有某種預啓動延遲?

+0

它來自http://www.javapractices.com/topic/TopicAction.do?Id=10? – 2011-02-28 12:57:36

+0

你從哪裏找到它的?我的猜測是,這是在排序討論的背景下。 – unholysampler 2011-02-28 12:58:05

+0

嗯,是的,我知道,我只是想知道這是真的,因爲我沒有發現任何其他提及這樣的事情。 – dhblah 2011-02-28 12:59:06

回答

5

考慮一個具有多個屬性的類。爲了比較實例,你需要比較它們的一些屬性。如果除一個之外的所有屬性都相等,則需要執行的比較的數量取決於屬性比較的順序:如果您碰巧先比較不同屬性,則會得到一個比較結果。但如果比較最後的不同屬性,則必須執行n比較以獲得相同的結果。

正如@Kdeveloper指出的那樣,除非您批量進行大量類似比較,否則性能差異可能不明顯。但另一個好處是恕我直言邏輯順序:這讓你想到類屬性之間的邏輯關係。總的來說,因爲這是一個無中斷的優化(即它不會使代碼更難以閱讀和維護),所以我認爲這是值得在大部分時間內完成的。

+0

+1不錯的一個。從未考慮過這方面。 – 2011-02-28 13:03:30

+0

嗯,我認爲也許那個短語不是關於要比較的對象,而是關於那個屬性。起初我認爲對象比較的順序很重要,但如果這是你所談論的內容,這是有道理的。 – dhblah 2011-02-28 13:05:27

0

這是真的嗎?如果是這樣,爲什麼?

那麼,從字面上來看,沒有。無論歷史情況如何,compareTo方法執行所需的時間也相當長。

如果它可以在特定實現中獲得任何整體性能?是肯定的。但爲了能夠回答你的問題,我們需要更多關於情況的背景。

+0

誠然,如果你只比較一個屬性。看看PéterTörök的回答。 – 2011-02-28 13:02:12

1

是的,因爲如果你第一次把最有選擇性的比較,你會平均每個比較少執行代碼的真實

。但是,由於這些測試通常速度非常快,因此如果您比較多個對象,例如對大集合進行排序時,速度的提升只會顯而易見。

+0

*但是,由於這些測試通常速度非常快*如果您需要在某些其他合適的/字段上調用compareTo,它們並不快,尤其是,如果它是一個具有多個(> 2)呼叫目標的接口。 – bestsss 2011-02-28 13:13:00

+0

儘管如此,當你經常這樣做時,這通常是顯而易見的,例如對集合進行排序。 – Kdeveloper 2011-02-28 14:36:13