介绍
Scala 中的 Map 和 Java 类似,它存储的内容也是键值对(key-value)映射,并且是无序的
可变的 Map,在 scala.collection.mutable 包下,定义好后,可以 添加、修改、删除 key-value
创建
val 名字:mutable.Map[key类型,value类型] = mutable.Map(key1->value1,key2->value2,...)
可省略类型:
val 名字 = mutable.Map(key1->value1,key2->value2,...)
例子
import scala.collection.mutable
def main(args: Array[String]): Unit = {
//创建
val map:mutable.Map[String,Int] = mutable.Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
println(map)
println(map.getClass)
}
执行结果:
Map(韩梅梅 -> 19, lucy -> 21, 李雷 -> 20)
class scala.collection.mutable.HashMap
添加、修改key-value
当要添加的 key 在map中存在,就执行更新操作
当要添加的 key 在map中不存在,就执行添加操作
方式一
map名.put(key,value)
底层调用的是 update() ,但是 put() 方法有返回值
例子
def main(args: Array[String]): Unit = {
//创建
val map:mutable.Map[String,Int] = mutable.Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
map.put("lili",21) //执行添加
map.put("李雷",21) //执行更新
println(map)
println(map.getClass)
}
根据key修改value;key不存在执行添加
方式二
map名.update(key,value)
底层调用的是 this += ((key, value)) ,该方法无返回值
例子
def main(args: Array[String]): Unit = {
//创建
val map:mutable.Map[String,Int] = mutable.Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
println(map)
map.update("李雷",21) //执行更新
map.update("lili",21) //执行添加
println(map)
}
方式三
map名 += ((key,value))
例子
def main(args: Array[String]): Unit = {
//创建
val map:mutable.Map[String,Int] = mutable.Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
map += (("李雷",21)) //执行更新
map += (("lili",21)) //执行添加
println(map)
println(map.getClass)
}
根据key删除
根据key删除 key-value,key不存在也不会报错
方式一
map名.remove(key)
例子
def main(args: Array[String]): Unit = {
//创建
val map:mutable.Map[String,Int] = mutable.Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
println(map)
map.remove("李雷")
println(map)
}
方式二
map名 -= key
例子
def main(args: Array[String]): Unit = {
//创建
val map:mutable.Map[String,Int] = mutable.Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
println(map)
map -= "李雷"
println(map)
}
合并2个map
方式一
将map2中的值添加、覆盖到map1中
map1 ++=map2
例子
def main(args: Array[String]): Unit = {
val map1 = mutable.Map("李雷" -> 20,"韩梅梅" -> 19)
val map2 = mutable.Map("李雷" -> 30,"lucy" -> 21)
map1 ++= map2
println(map1)
println(map2)
}
执行结果:
Map(韩梅梅 -> 19, lucy -> 21, 李雷 -> 30)
Map(lucy -> 21, 李雷 -> 30)
map2中的 李雷,在map1中也存在,所以就更新map1中对应的value值
map2中的 lucy,在map1中不存在,所以就添加到map1中
方式二
val map3 = map1 ++ map2
例子
def main(args: Array[String]): Unit = {
val map1 = mutable.Map("李雷" -> 20,"韩梅梅" -> 19)
val map2 = mutable.Map("李雷" -> 30,"lucy" -> 21)
val map3 = map1 ++ map2 //map1、map2不改变,将map2中的元素添加、覆盖到map1,并返回
println(map1)
println(map2)
println(map3)
}
执行结果:
Map(韩梅梅 -> 19, 李雷 -> 20)
Map(lucy -> 21, 李雷 -> 30)
Map(韩梅梅 -> 19, lucy -> 21, 李雷 -> 30)
根据key访问value
方式一
map名.getOrElse(key,默认值)
解释:根据 key 取对应的 value值;如果key不存在,那么返回默认值
例子
def main(args: Array[String]): Unit = {
//创建
val map:Map[String,Int] = Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
println(map.getOrElse("李雷",0)) //取出李雷对应的value值
println(map.getOrElse("李小雷",0)) //李小雷不存在,返回0
}
方式二
map名(key)
解释:根据 key 取对应的 value值;如果key不存在,那么报错
例子
def main(args: Array[String]): Unit = {
//创建
val map:Map[String,Int] = Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
println(map("李雷"))
println(map("李小雷"))
}
不存在李小雷,报错如下:
java.util.NoSuchElementException: key not found: 李小雷
遍历
遍历key-value
def main(args: Array[String]): Unit = {
//创建
val map:Map[String,Int] = Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
//遍历
map.foreach((item:(String,Int)) => println( item._1+"--"+item._2 ))
}
只遍历key
def main(args: Array[String]): Unit = {
//创建
val map:Map[String,Int] = Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
for(item <- map.keys){
println(item)
}
}
只遍历value
def main(args: Array[String]): Unit = {
//创建
val map:Map[String,Int] = Map("李雷"->20,"韩梅梅"->19,"lucy"->21)
for(item <- map.keys){
println(item)
}
for(item <- map.values){
println(item)
}
}