1
比方說,我有以下2個功能等效的代碼段,返回有自己的逆轉也在列表字符串列表:調用函數或外部濾波器
var a = Array("abc", "bca", "abc", "aba", "cba")
a.filter(x => a.toSet(x.reverse)).distinct
和
var a = Array("abc", "bca", "abc", "aba", "cba")
var aSet = a.toSet // notice that toSet is called outside filter
a.filter(x => aSet(x.reverse)).distinct
我想知道這些片段之間的時間複雜程度是否有差異,因爲我在第一個片段中調用.toSet
爲a
中的每個元素,而在第二個片段中,我只在開始時調用它。然而,這就是說,有些東西告訴我編譯器可能會優化第一個調用,產生相當於時間複雜度的2個片段。
如果後者是真的,請您向我推薦一些相關文獻?
謝謝。
您可以嘗試scalac命令的-print選項來比較生成的Java代碼。您也可以放入一些時間並運行代碼幾千次以實證檢查。 – wwkudu