Map(映射)是一种可迭代的键值对(key/value)结构。
所有的值都可以通过键来获取。
Map 中的键都是唯一的。
1. 申明
object MapApp extends App {
//不可变map
//初始化
// val scoremap = Map("name"->"vilay","age"->"20")
// var scoremap1 = Map(("name","vilay"),("age","78"))
// scoremap1("name") = "zz" //会报错
// // println(scoremap)
// println(scoremap1)
//可变map
val scoremap2 = scala.collection.mutable.Map("name" -> "vilay", "age" -> 20)
scoremap2("name") = "cc"
println(scoremap2) //HashMap(name -> cc, age -> 20)
}
2. 获取
val scoremap = Map("name"->"vilay","age"->30,"score"->100)
println(scoremap("name")) //vilay
println(scoremap.getOrElse("mobile","167676767")) //如果没有值获取默认的
3. 修改
可变 Map 允许进行新增、修改、删除 不可变不允许修改
val scoremap = scala.collection.mutable.Map("name"->"vilay","age"->30,"score"->100)
scoremap("name") = "zz"
println(scoremap) //修改值 HashMap(name -> zz, score -> 100, age -> 30)
scoremap("mobile") = "168383333" //有就修改,没有就新增
println(scoremap) //HashMap(mobile -> 168383333, name -> zz, score -> 100, age -> 30)
scoremap += ("tel"->"345555","email"->"23sd@dd.com") //新增值
println(scoremap) //HashMap(score -> 100, mobile -> 168383333, name -> zz, tel -> 345555, age -> 30, email -> 23sd@dd.com)
scoremap -= "name" //根据key进行删除
println(scoremap) //HashMap(score -> 100, mobile -> 168383333, tel -> 345555, age -> 30, email -> 23sd@dd.com)
for (elem <- scoremap) {
println(elem) //(score,100) (mobile,168383333) (tel,345555) (age,30)(email,23sd@dd.com)
}
不可变 Map 不允许进行新增、修改、删除等操作,但是允许由不可变 Map 产生新的 Map,新的Map也是不可变的
val scoremap = Map("name"->"vilay","age"->40)
val newscoremap = scoremap + ("mobile"->"13344444")
println(newscoremap)
4. 遍历
val scoremap = Map("name"->"vilay","age"->40)
for (key <- scoremap.keys) { //遍历key
println(key)
}
for (value <- scoremap.values) { //遍历 value
println(value)
}
for ((key,value) <- scoremap) { //遍历键值对
println(key)
println(value)
}
5. yield
val scoremap = Map("vilay"->40,"zz"->90)
val newscoremap = for((key,value) <- scoremap) yield (key,value*10)
println(newscoremap) //值扩大10倍
val rerverse = for((key,value) <- scoremap) yield (value,key)
println(rerverse) //键值互换
6. 其它Map结构
在使用 Map 时候,如果不指定,默认使用的是 HashMap,如果想要使用 TreeMap 或者 LinkedHashMap,则需要显式的指定。
// 1.使用 TreeMap,按照键的字典序进行排序
val scores01 = scala.collection.mutable.TreeMap("B" -> 20, "A" -> 10, "C" -> 30)
for (elem <- scores01) {println(elem)}
// 2.使用 LinkedHashMap,按照键值对的插入顺序进行排序
val scores02 = scala.collection.mutable.LinkedHashMap("B" -> 20, "A" -> 10, "C" -> 30)
for (elem <- scores02) {println(elem)}
7.Map 其它方法
scores.size //获取长度
scores.isEmpty //是否为空
scores.contains("A") //是否含有A