我想對何時(忽略可用內存空間)有一個明確的理解,它存儲比較的結果而不是重新計算它是有意義的。證明存儲所帶來的時間成本的轉折點是什麼?它是2,3或4比較?更多?什麼時候存儲比較結果與重新計算速度比較有何意義?
例如,在這種特殊情況下,哪個選項(通常)在速度方面表現更好?
選項1:
int result = id.compareTo(node.id);
return result > 0 ? 1 : result < 0 ? -1 : 0;
選項2:
return id.compareTo(node.id) > 0 ? 1 : id.compareTo(node.id) < 0 ? -1 : 0;
我試着來分析這兩個選項自己爲了回答我的問題,但是我沒有這個很多經驗這樣的性能測試,因此,寧願從具有更多經驗或更好地理解所涉及的理論元素的人那裏得到更明確的答案。
我知道這不是什麼大不了的事情,而且大多數情況下差異可以忽略不計。然而,我是一個完美主義者,我真的想解決這個特殊問題,以便我可以繼續我的生活,哈哈。
此外,我認爲這個答案很可能會對我在將來可能遇到的類似情況有所啓發,其中差異可能非常顯着(例如比較或內存分配的成本無法達到被招致或者足夠複雜,導致有關性能的真正問題)。
答案應該與Java編程相關,而不是其他語言。
我知道我已經提到過幾次了,但請僅將注意力集中在SPEED DIFFERENCE上!我很清楚在編寫代碼時可以並且應該考慮許多其他因素,但是在這裏我只想要一個更快的參數。
首先考慮可讀性,然後是性能! – ewernli 2013-03-19 12:29:01
@ewernli 的確如此,但我所尋找的答案實際上只是面向一個優先事項:表現。我明白,在實際應用中,我當然會考慮其他(可以說更重要的)優先事項。但是,謝謝你的提醒! – sweetname 2013-03-19 12:54:12
你仍然可以嘗試測量執行時間,調用測試方法一百萬次,使用nanoTime()進行測量,並通過兩種方法的一百萬次調用來溫暖他的虛擬機。看看方法沒有被優化掉:總結每個方法調用的結果,並最終打印出結果。 – AlexWien 2013-03-19 13:21:43