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