跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 集合类型 filter 后执行 foreach 的效率 比 foreach 里写 if 来的慢
未分類
19 5 月 2020

集合类型 filter 后执行 foreach 的效率 比 foreach 里写 if 来的慢

集合类型 filter 后执行 foreach 的效率 比 foreach 里写 if 来的慢

資深大佬 : muziling 1

object test {   def main(args: Array[String]): Unit = {     def listTestD = (0 to 20000000).toList     var l1 = System.currentTimeMillis()     var sum = 0     listTestD.foreach{x=> if (x%2==0) sum = x}     println(System.currentTimeMillis()-l1)     sum = 0     l1 = System.currentTimeMillis()     listTestD.filter(_%2==0).foreach(sum = _)     println(System.currentTimeMillis()-l1)   } } 

执行结果是: 17585, 21059 效率差 20%左右

避免缓存,对掉两个 foreach

object test {   def main(args: Array[String]): Unit = {     def listTestD = (0 to 20000000).toList     var l1 = System.currentTimeMillis()     var sum = 0     listTestD.filter(_%2==0).foreach(sum = _)     println(System.currentTimeMillis()-l1)     sum = 0     l1 = System.currentTimeMillis()     listTestD.foreach{x=> if (x%2==0) sum = x}     println(System.currentTimeMillis()-l1)   } } 

执行结果是: 35082, 16201 效率差近 50%。

如果 listTestD 存储一个对象的内容,效率是不是会差更大?

大佬有話說 (2)

  • 主 資深大佬 : muziling

    补充: 代码是 .filter().foreach 两步链式 和 一次链式 foreach( if(filter 的条件) ) 的差异

  • 資深大佬 : Tomotoes

    这不很明显嘛。。 两次 o ( n )与一次 o ( n )
    Scala 并不会优化这种主动的链式调用。
    建议换 Kotlin + asSequence,不管你调用多少次,都优化成一次 o ( n )

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具