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)

}