天天看點

43_集合_Map

import scala.collection.mutable

/*
* 說明
*     和java類似,也是Hash Tables實作的map
* */

//不可變map
object MapTest extends App {
  //1.初始化
  var map = Map[String, Int]("x" -> 1, "y" -> 2, "z" -> 3)

  //2.列印
  println(map)

  //3.添加元素
  var map1 = map + (("m", 1)) //底層調用updated方法
  var map2 = map.updated("p", 10)
  println(map1)
  println(map2)
  println(map)

  println("==========================")
  //4.删除元素(根據key删除元素,不存在就傳回複制原對象)
  var map3 = map - (("m"))
  var map4 = map.removed("k")
  println(map3)
  println(map4)
  println(map)

  println("======================")
  //5.通過key擷取value,傳回Option對象,沒有key時,傳回None
  var value: Option[Int] = map.get("z")
  println(value.get) //當沒有對應key時,會報空指針異常
  //6.當key不存在時,傳回預設值
  var defaultValue = map.getOrElse("p", 99)
  var defaultValue1 = map.get("p").getOrElse(88)
  println(defaultValue)
  println(defaultValue1)

  //7.擷取key的set
  var keys = map.keys
  var keys1 = map.keySet
  println(keys1.getClass)

  //8.擷取value的set
  var values = map.values
  println(values)

  //9.周遊map
  for (key <- map.keys) {
    //printf("%s - %d\n", key, map.get(key).get)
    printf("{%s : %d}\n", key, map.getOrElse(key, 0))
  }

  //10.foreach
  def show(tp: (String, Int)) = printf("{%s : %d}\n", tp._1, tp._2)

  map.foreach(x => println(x.getClass))
  //操作的參數為元組
  map.foreach(show _)


}

//可變map
object VarMapTest extends App {
  //1. 初始化
  var map = mutable.Map[String, Int]("x" -> 1, "y" -> 2, "z" -> 3)

  //2. 添加元素(修改調用對象)
  map += ("p" -> 9)
  map.put("m", 19)
  map.update("q", 16)
  println(map)

  //3.通過key擷取value
  println(map.get("m").get) //傳回Option對象,當未找到key時,傳回None
  println(map.getOrElse("m", 99)) //當未找到key時,傳回預設值

  //4.删除資料(通過key)
  map -= ("p", "q")
  println(map)

  //5.更新資料(有則更改,無則添加)
  map.update("m", 100)
  println(map)

}