我剛剛發現了這樣的說法:「通過比較最可能發生差異的項目,可以大大提高compareTo的性能」。這是真的嗎?如果是這樣,爲什麼?比較是否有某種預啓動延遲?
回答
考慮一個具有多個屬性的類。爲了比較實例,你需要比較它們的一些屬性。如果除一個之外的所有屬性都相等,則需要執行的比較的數量取決於屬性比較的順序:如果您碰巧先比較不同屬性,則會得到一個比較結果。但如果比較最後的不同屬性,則必須執行n比較以獲得相同的結果。
正如@Kdeveloper指出的那樣,除非您批量進行大量類似比較,否則性能差異可能不明顯。但另一個好處是恕我直言邏輯順序:這讓你想到類屬性之間的邏輯關係。總的來說,因爲這是一個無中斷的優化(即它不會使代碼更難以閱讀和維護),所以我認爲這是值得在大部分時間內完成的。
+1不錯的一個。從未考慮過這方面。 – 2011-02-28 13:03:30
嗯,我認爲也許那個短語不是關於要比較的對象,而是關於那個屬性。起初我認爲對象比較的順序很重要,但如果這是你所談論的內容,這是有道理的。 – dhblah 2011-02-28 13:05:27
這是真的嗎?如果是這樣,爲什麼?
那麼,從字面上來看,沒有。無論歷史情況如何,compareTo
方法執行所需的時間也相當長。
如果它可以在特定實現中獲得任何整體性能?是肯定的。但爲了能夠回答你的問題,我們需要更多關於情況的背景。
誠然,如果你只比較一個屬性。看看PéterTörök的回答。 – 2011-02-28 13:02:12
是的,因爲如果你第一次把最有選擇性的比較,你會平均每個比較少執行代碼的真實
。但是,由於這些測試通常速度非常快,因此如果您比較多個對象,例如對大集合進行排序時,速度的提升只會顯而易見。
*但是,由於這些測試通常速度非常快*如果您需要在某些其他合適的/字段上調用compareTo,它們並不快,尤其是,如果它是一個具有多個(> 2)呼叫目標的接口。 – bestsss 2011-02-28 13:13:00
儘管如此,當你經常這樣做時,這通常是顯而易見的,例如對集合進行排序。 – Kdeveloper 2011-02-28 14:36:13
- 1. 功能是否可以延遲啓動而不是延遲?
- 2. Rails啓動延遲
- 3. 啓動QPropertyAnimation延遲
- 4. 是否有Service Worker啓動waitUntil來延遲處理提取?
- 5. 是否有延遲QUnit測試套件啓動的方法?
- 6. 異步是否比延遲更好?
- 7. 啓動時延遲活動
- 8. 以某種延遲提交雲任務
- 9. NHibernate延遲加載和對象比較
- 10. Cocoa Touch - 假設延遲比較
- 11. Jetty 8.1.2啓動延遲
- 12. 延遲啓動服務
- 13. 石英延遲啓動
- 14. Android相機啓動延遲
- 15. JBoss啓動時間延遲
- 16. 碼頭啓動延遲
- 17. 方法啓動延遲
- 18. 添加啓動延遲
- 19. jQuery延遲啓動功能
- 20. 是否有某種Grooveshark API?
- 21. 延遲加載發生當某種原因DeferredLoadingEnabled是
- 22. 是否有可能延遲setAnimationDidStopSelector?
- 23. 「自動」與「自動(延遲啓動)」
- 24. 是否可以延遲window.load?
- 25. 是否有可能點擊延遲重新啓動一次新的點擊
- 26. 活動啓動延遲(使用WakeLock)
- 27. Youtube延遲自動啓動視頻
- 28. 重新啓動動畫時延遲
- 29. jQuery:某物正在延遲動畫
- 30. 我是否可以延遲加載我的庫,以便它們不會延遲我的應用程序啓動?
它來自http://www.javapractices.com/topic/TopicAction.do?Id=10? – 2011-02-28 12:57:36
你從哪裏找到它的?我的猜測是,這是在排序討論的背景下。 – unholysampler 2011-02-28 12:58:05
嗯,是的,我知道,我只是想知道這是真的,因爲我沒有發現任何其他提及這樣的事情。 – dhblah 2011-02-28 12:59:06