不可变Map,默认的Map
scala> val map = Map(1 -> "t1",2 -> "t2") map: scala.collection.immutable.Map[Int,String] = Map(1 -> t1, 2 -> t2) scala> map.updated(1,"t11") res26: scala.collection.immutable.Map[Int,String] = Map(1 -> t11, 2 -> t2) scala> map.updated(3,"t3") res27: scala.collection.immutable.Map[Int,String] = Map(1 -> t1, 2 -> t2, 3 -> t3)
//可见updated返回新的不可变Map,原map没有改变 scala> map res28: scala.collection.immutable.Map[Int,String] = Map(1 -> t1, 2 -> t2)
//取值
scala> map(1) res29: String = t1 scala> map(2) res30: String = t2
override def updated[B1 >: String](key: Int,value: B1): scala.collection.immutable.Map[Int,B1]
//B1 >: String 表示B1是String的父类
可变Map,需要导类并指定别名
scala> import scala.collection.mutable.{Map => MMap} import scala.collection.mutable.{Map=>MMap} scala> val mmap = MMap((1,"t1"),(2,"t2")) mmap: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t1) scala> mmap.updated(1,"t11") res31: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t11) scala> mmap.updated(3,"t3") res32: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t1, 3 -> t3)
//updated不能用于修改原Map scala> mmap res33: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t1) scala> mmap.update(1,"t11") scala> mmap.update(3,"t3")
//可变Map中update可修改原Map scala> mmap res36: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t11, 3 -> t3)
//取值
scala> mmap(1) res37: String = t11
Map是对偶的集合,对偶是只有两个元素的元组,对应java Map中Entry
scala> val v1 = 1 -> "t1" v1: (Int, String) = (1,t1) scala> val v2 = (2,"t2") v2: (Int, String) = (2,t2)
contains、getOrElse、+=
scala> map.contains(1) res53: Boolean = true scala> map.contains(3) res55: Boolean = false scala> val v = map.getOrElse(3,"t3") v: String = t3 scala> mmap res59: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 4 -> t4, 1 -> t11, 3 -> t3) scala> mmap.+=((5,"t5")) res60: mmap.type = Map(2 -> t2, 5 -> t5, 4 -> t4, 1 -> t11, 3 -> t3)
有序Map
scala> val m = scala.collection.immutable.SortedMap((4,"t4"),(3,"t3"),(0,"t0")) m: scala.collection.immutable.SortedMap[Int,String] = Map(0 -> t0, 3 -> t3, 4 -> t4)
tuple
scala> val t = (1,"tom",'a') t: (Int, String, Char) = (1,tom,a) scala> t._3 res68: Char = a
zip拉链
scala> val ids = Array(1,2,3) ids: Array[Int] = Array(1, 2, 3) scala> val names = Array("t1","t2","t3") names: Array[String] = Array(t1, t2, t3) scala> ids.zip zip zipAll zipWithIndex scala> ids.zip(names) res62: Array[(Int, String)] = Array((1,t1), (2,t2), (3,t3))
zipAll全拉链
scala> val arr = Array(1,2,3) arr: Array[Int] = Array(1, 2, 3) scala> val arr1 = Array(1,2,3) arr1: Array[Int] = Array(1, 2, 3) scala> val arr2 = Array(1,2,3,4) arr2: Array[Int] = Array(1, 2, 3, 4) scala> val arr3 = Array(1,2) arr3: Array[Int] = Array(1, 2) scala> arr.zipAll(arr1,-1,-2) //三个参数,arr1被拉数组,-1当arr不够时用-1填充,-2当arr1不够时用-2填充
res4: Array[(Int, Int)] = Array((1,1), (2,2), (3,3)) scala> arr.zipAll(arr2,-1,-2) res5: Array[(Int, Int)] = Array((1,1), (2,2), (3,3), (-1,4)) scala> arr.zipAll(arr3,-1,-2) res6: Array[(Int, Int)] = Array((1,1), (2,2), (3,-2))