集合操作扩展
-
拉链(合并):
- 基本介绍:当我们需要将两个集合进行 对偶元组合并,可以使用拉链。
- 实例:
val list1 = List(1,2,3) val list2 = List(9,8,7) val list3 = list1.zip(list2) println(list3)//(1,9)(2,8)(3,7)
- 注意事项:
①如果两个集合个数不对应,会造成数据丢失。
②集合不限于List, 也可以是其它集合比如 Array
③拉链的本质就是两个集合的合并操作,合并后每个元素是一个 对偶元组。
for(item<-list3){ print(item._1 + " " + item._2) //取出 }
-
迭代器:
- 基本说明:通过iterator方法从集合获得一个迭代器
- 遍历操作示例:
val it = List(1,2,3).iterator
//方式一:
while(it.hasNext)
println(it.next)
//方式二
for (i <- it)
println(i)
- 流:Stream
- 基本说明:
stream是一个集合。这个集合,可以用于存放无穷多个元素,但是这无穷个元素并不会一次性 生产出来,而是需要用到多大的区间,就会动态的生产,末尾元素遵循lazy规则(即:要使用结 果才进行计算的) 。 - 创建Stream对象(示例):
def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1)
val stream1 = numsForm(1)
- 说明:
①Stream 集合存放的数据类型是BigInt
②numsForm 是自定义的一个函数,函数名是自己指定的。
③创建的集合的第一个元素是 n , 后续元素生成的规则是 n + 1
④后续元素生成的规则是可以自己指定 ,比如 numsForm( n * 4)…
- 基本说明:
- 视图:View
- 基本介绍:
Stream的懒加载特性,也可以对其他集合应用view方法来得到类似的效果,具有如下特点:
①view方法产出一个总是被懒执行的集合。
②view不会缓存数据,每次都要重新计算,比如遍历View时。
- 示例:请找到1-100 中,数字倒序排列 和它本身相同的所有数。(1 2, 11, 22, 33 ...)
def multiple(num: Int): Int = num
def eq(i: Int): Boolean = i.toString.equals(i.toString.reverse)
//说明: 没有使用view
val viewSquares1 = (1 to 100).map(multiple).filter(eq)
println(viewSquares1)
//for (x <- viewSquares1) {}
//使用view
val viewSquares2 = (1 to 100).view.map(multiple).filter(eq)
println(viewSquares2)
- 线程安全的集合:
- 基本介绍:
所有线程安全的集合都是以Synchronized开头的集合:
SynchronizedBuffer SynchronizedMap SynchronizedPriorityQueue SynchronizedQueue SynchronizedSet SynchronizedStack
- 基本介绍:
- 并行集合:
- 基本介绍:
①Scala为了充分使用多核CPU,提供了并行集合(有别于前面的串行集合),用于多核环境的并行计算。
②主要用到的算法有: Divide and conquer : 分治算法,Scala通过splitters(分解器),combiners(组合器)等抽象层来实现,主要原理是将计算工作分解很多任务,分发给一些处理器去完成,并将它们处理结果合并返回
②Work stealin算法:主要用于任务调度负载均衡(load-balancing),通俗点完成自己的所有任务之后,发现其他人还有活没干完,主动(或被安排)帮他人一起干,这样达到尽早干完的目的 - 应用案例:
①打印1-5:
②查看并行集合中元素访问的线程(1 to 5).foreach(println(_)) println() (1 to 5).par.foreach(println(_))
val result1 = (0 to 100).map{case _ => Thread.currentThread.getName} val result2 = (0 to 100).par.map{case _ => Thread.currentThread.getName} println(result1) println(result2)
- 基本介绍: