映射其实就是Map,Scala中映射分为可变映射和不可变映射。java
不可变映射其值不能改变,构造方式以下:数组
从上面咱们能够看到,当咱们尝试去改变不可变映射的值时,报错了。而且这里注意看下咱们的Map是 scala.collection.immutable.Map[String,Int] 注意immutable包,他表示不可变,这里能够与后续的可变映射的包名做对比函数
若是你须要构造一个可变映射,请这样作:使用 scala.collection.mutable.Mapspa
若是你想从一个空的映射开始,你须要选定一个映射实现并给出类型参数:scala
在Scala中映射是对偶的集合。对偶简单地说就是两个值构成的组,这两个值并不必定是同一个类型,好比("HYC",10)。对象
-> 操做符用来建立对偶 "HYC" -> 10 产出的代码是("HYC",10),所以我么你彻底能够这样来定义映射:排序
获取值得方法前面咱们已经使用了ip
咱们使用()来获取值,和数组很像,可是数组()当中是坐标,映射当中()是key。io
--------------------------------------table
要检查映射中是否有某个指定的键,能够用contains方法
因为这样的组合十分广泛,所以Scala中提供了一个快捷方法:
更新映射中的值,相似于赋值的操做,map变量是一个可变映射
针对已经有的值,会采用覆盖更新操做。
针对没有的值,会从新生成一个映射
若是咱们想要在映射中添加多个关系,能够用+=操做:
对应的,移除某个键对应的值,能够用-=操做:
--------------------------------------
你不可能更新一个不可变映射,但你能够经过其余方式获取相同的操做——获取一个包含所须要的更新的新映射:
而且这种操做会将重复的映射进行更新。
同理,咱们也能够更新var变量
要从不可变映射中移除某个键,你能够用 - 操做符
总结:可变映射用 +=、-=。不可变映射用+、-。为何不可变不能用+=、-=?由于+=、-=不会生成新的映射,实在原来的映射中改变,所以不可变映射不能用+=、-=。而可变数组不能用+、-么?实际上是能够的,可是经过+、-操做后会生成新的映射,这对于可变数组来讲有些多此一举,可是对于不可变映射来讲让它有课能够“改变”的可能。
以下这段超简单的循环便可遍历映射中的全部键/值对偶
for ( (k , v) <- 映射 ) 处理k和v
若是要反转一个映射——交换键和值得位置,能够用
for ( (k , v) <- 映射 ) yield (v , k)
若是处于某种缘由,咱们只须要访问键或值,向Java同样,则能够用keySet和values方法。
keySet方法返回一个Set集合
values方法返回一个Iterable
注:在Scala中咱们把(k,v)叫作一个元组,映射不过是2维的元组的集合
在操做映射时,咱们须要一个选定的实现:哈希表或者平衡树。默认状况下,Scala给的是哈希表。哈希表没有对键进行排序,而且仍是乱序,若是咱们须要有序的映射,咱们须要实现一个树形映射:
SortedMap是一个树形的映射,所以是有序的,而且他是一个可变映射(老版本是不可变的)
若是要安插入顺序访问全部的键,可使用LinkedHashMap:
Scala映射与Java映射之间的转换:
1.Java映射转Scala映射:
须要添加以下引用
import scala.collection.JavaConversions.mapAsScalaMap
2.Scala映射转Java映射:
须要添加以下引用
import scala.collection.JavaConversions.mapAsJavaMap
映射是键/值对偶的集合。对偶是元组(tuple)的最简单形态,元组是不一样类型的值得汇集。
注:对偶是二元元组的叫法。
元组的值是经过将单个的值包含在圆括号中构成。例如:
(1, 3.14, "Fred")
它是一个元组,类型为:
Tuple3[Int, Double, java.lang.String] 也能够写为 (Int, Double, java.lang.String)
因而可知,元组最多支持22元
--------------------------------------
元组如何访问?好比有以下元组:
val t = (1, 3.14, "Fred")
你就能够用方法_一、_二、_3访问其元组:
说明:你能够把t._2 写为t 2(用空格而不是句点),但不能写成t_2。
--------------------------------------
咱们还能够用元组来做为承接变量或者函数返回值,好比:
将咱们以前定义的元组 t 赋值给一个新的元组对象,远足中定义的各个部件将都会被赋值
有时咱们并不须要全部的部件,此时咱们能够将不须要的位置上用 _ 表示。
注:元组中定义的部件都是常量val。
有时咱们的韩式须要返回不仅一个值的状况。此时咱们能够用元组做为函数的返回值类型。
使用元组的缘由之一是把多个值绑定在一块儿,以便他们可以一块儿被处理,一般能够用数组的zip方法完成。例如:
上面的例子太完美了,有可能两个数组不同长,这时:
咱们能够看到zip操做是安位置对应匹配的,匹配不到的就丢弃了。
--------------------------------------
toMap方法能够将对偶的集合转换成映射