加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala Range(x,Int.MaxValue)与Stream.from(x)

发布时间:2020-12-16 18:55:16 所属栏目:安全 来源:网络整理
导读:我是 Scala初学者,用 Project Euler练习我的FP技能. 在研究“Problem 5:可以被1到20的所有数字整除的最小正数时,我正在比较基于范围与流的解决方案: val r1 = Range(20,Int.MaxValue).find(i = (2 to 20).forall(i % _ == 0)).getval r2 = Stream.from(20).
我是 Scala初学者,用 Project Euler练习我的FP技能.

在研究“Problem 5:可以被1到20的所有数字整除的最小正数时,我正在比较基于范围与流的解决方案:

val r1 = Range(20,Int.MaxValue).find(i => (2 to 20).forall(i % _ == 0)).get
val r2 = Stream.from(20).find(i => (2 to 20).forall(i % _ == 0)).get

奇怪的是,r1的计算在大约20秒内完成,而基于流的r2计算耗尽了内存.我本来期待相反的 – 有人可以解释一下吗?

解决方法

对于范围,它总是需要固定大小的内存.

对于流,它将缓存您甚至使用的所有元素.所以在查找r2中的流时,一直保持增加直到内存不足.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读