栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Scala:迭代器源码分析

Scala:迭代器源码分析

下面代码使用map对所有元素加一,并不会使得list元素改变,也就是新的加一的集合开启了新的空间

val list= List(1,2,3,4,5,6)
list.foreach(println)
list.map(_ + 1)
list.foreach(println)

同理,下面是wordcount的部分代码,会浪费很多内存空间

val wordCount= List("hello world","hello scala","hello spark")
val word = wordCount.flatMap(_.split(" "))
val wordTuple = word.map((_, 1))

这就产生了迭代器模式,来节省来内存

val wordCount= List("hello world","hello scala","hello spark")
val iterator = wordCount.iterator
val word = iterator.flatMap(_.split(" "))
val wordTuple = word.map((_, 1))
wordTuple.foreach(println)

输出:
(hello,1)
(world,1)
(hello,1)
(scala,1)
(hello,1)
(spark,1)

为什么可以减少内存呢?scala迭代器源码分析

上面是形象化代码嵌套的过程

每次.iterator 都会new AbstractIterator,得到第一个迭代器器,之后迭代器每次调用的方法得到的都是迭代器,AbstractIterator有重要的两个方法hasNext和next
同样迭代器没有做真正的计算,只是new AbstractIterator,以及隐式的调用链的构造
在真正调用hasNext 或者 next才会触发调用过程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/695655.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号