scala教程:Map(可变)

介绍

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)
  }
}

原文出处:/show_1IX1DnGCGJwM.html