import scala.collection.mutable
val q1 =newmutable.Queue[Int]println(q1)
Queue()
1.2 队列元素的追加
q1 +=1println(q1)
Queue(1)
1.3 向队列中追加 List
q1 ++=List(2,3,4)//追加集合中的元素println(q1)
Queue(1,2,3,4)
1.4 按照进入队列的顺序删除元素
q1.dequeue()println(q1)
Queue(2,3,4)
1.5 塞入数据
q1.enqueue(9,8,7)println(q1)
Queue(2,3,4,9,8,7)
1.6 返回队列的第一个元素
println(q1.head)
2
1.7 返回队列最后一个元素
println(q1.last)
7
1.8 返回除了第一个以外剩余的元素(尾部)
println(q1.tail.tail.head)//可以用于递归调用
4
2 映射 Map
2.1 构造不可变映射
val map1 = Map[String,Int]("Alice"->10,"Bob"->20,"Kotlin"->30)
2.2 构造可变映射
val map2 = scala.collection.mutable.Map("Alice"->10,"Bob"->20,"Kotlin"->30)
2.3 空的映射
val map3 =newscala.collection.mutable.HashMap[String, Int]
2.4 对偶元组(包含键值对的二元组)
val map4 =Map(("Alice",10),("Bob",20),("Kotlin",30))
2.5 取值
val value1 =map1("Alice")println(value1)
如果映射中没有值,则会抛出异常,使用 contains 方法检查是否存在 key。 (不推荐使用)
println(map1("a"))
Exception in thread "main" java.util.NoSuchElementException: key not found: a
at scala.collection.MapLike$class.default(MapLike.scala:228)
at scala.collection.AbstractMap.default(Map.scala:59)
at scala.collection.MapLike$class.apply(MapLike.scala:141)
at scala.collection.AbstractMap.apply(Map.scala:59)
at com.nefu.scala.chaptor06.Scala05_Map$.main(Scala05_Map.scala:22)
at com.nefu.scala.chaptor06.Scala05_Map.main(Scala05_Map.scala)
def main(args: Array[String]): Unit ={
val arr1s =1 to 5
def plus2(i:Int):Int={
i *2}//函数作为参数的用法是Scala的精华
val arr2s = arr1s.map(plus2)for(v <- arr2s){println(v)}}
246810
4.2 flatMap
flat 即压扁,压平,扁平化,效果就是将集合中的每个元素的子元素映射到某个函数并返回新的集合
val list =List("Tom","Jerry")
def strToUpper(s:String): String ={
s.toUpperCase()}//Hadoop的MapReduce中的Mapper!
val list1 = list.map(strToUpper)println(list1)//压扁 扁平化转换(集合中不会再有集合的转换处理方式)
val list2 = list.flatMap(strToUpper)println(list2)
List(TOM, JERRY)List(T, O, M, J, E, R, R, Y)
4.3 filter
将符合要求的数据(筛选)放置到新的集合中
val arr1s =List("Tom","Jerry","Bob","Jack","tim")//数据的筛选处理
def strFilter(s:String):Boolean={
s.toUpperCase.startsWith("T")|| s.toLowerCase.startsWith("j")}
val arr2s = arr1s.filter(strFilter)println(arr2s)
val arr3s= arr1s.filterNot(strFilter)println(arr3s)
List(Tom, Jerry, Jack, tim)List(Bob)
5 化简、折叠、扫描
5.1 折叠,化简
将二元函数引用于集合中的函数
val list =List(1,2,3,4,5)
def listAdd(x:Int,y:Int):Int={
x + y
}
def list2Str(i:Int,s:Any):Any={""+ s + i
}
def listMinus(x:Int,y:Int):Int={
x - y
}//从左侧开始加
val result1 = list.reduceLeft(listAdd)println(result1)//从右侧开始加
val result2 = list.reduceRight(list2Str)println(result2)
val result3 = list.reduceRight(listMinus)println(result3)/*
4 - 5 = -1
3 - (-1) = 4
2 - 4 = -2
1 - (-2) = 3
*/
val list =List(1,2,3,4,5)
def listAdd(r:Int,p:Int):Int={
r + p
}
def listMinus(p:Int,r:Int):Int={
r - p
}//1 +//100 + 1 = 101 + 2 = 103 + 3 = 106 ...
val result1 = list.foldLeft(100)(listAdd)println(result1)
val result2 = list.foldRight(100)(listMinus)println(result2)
var arr =newmutable.ArrayBuffer[Any]
arr +="hello"
val lst =List(10,20,30,40,50)
def addEle(ab:mutable.ArrayBuffer[Any],ele:Int):mutable.ArrayBuffer[Any]={
ab += ele
}
val result = lst.foldLeft(arr)(addEle)println(result)
Work stealin: 算法, 主要用于任务调度负载均衡(load-balancing),通俗点完成自己的所有任务之后,发现其他人还有活没干完,主动(或被安排)帮他人一起干,这样达到尽早干完的目的。
11.1 打印 1-5
(1 to 5).foreach(println)println()(1 to 5).par.foreach(println)
1234543521
11.2 查看并行集合中元素访问的线程
val result3 =(0 to 100).map{case _ => Thread.currentThread.getName}.distinct// (去重)
val result4 =(0 to 100).par.map{case _ => Thread.currentThread.getName}.distinct
println(result3)println(result4)