package lyzx.com.basic.day02
/**
* Map 和Tuple
*/
class T2{
/**
* 创建Map 和java中的Map作用一样
* 不可变Map
*/
def f1(): Unit ={
//创建不可变的集合,即集合一旦创建,则其值不能改变,下面是创建集合的2中方式
val m1 = Map("k1"->"v1","k2"->"v2")
val m2 = Map(("k3","v3"),("k4","v4"))
// m1("k1") = "modify"
// m2("k5")="v5"
println(m1 +" "+m1.getClass.getName)
println(m2 + " "+m2.getClass.getName)
println("==>"+m1("k1"))
//注意如果在某个map中不存在键时会报错
// println(m1("kk"))
//1、通过判断的方式解决这个问题
val value = if(m1.contains("kk")) m1("kk") else ""
println("==>"+value)
//2、通过getOrElse的方式解决
println("==>"+m1.getOrElse("kk",""))
//更新不可变Map的值,通过重新构造一个Map的方式
val mx1 = m1 + ("k10"->"v10")
println((m1 == mx1)+" newMap="+mx1)
val mx2 = m1 - "k1"
println((m1 == mx2) +" newMap="+mx2)
}
/**
* 可变Map
*/
def f2(): Unit ={
val m1 = scala.collection.mutable.Map("k1"->"v1","k2"->"v2")
val m2 = scala.collection.mutable.Map(("k3","v3"),"k4"->"v4")
m1("k8")="newkey"
m2("007") = "吊"
println("m1="+m1)
println("m2="+m2)
m1 += ("k8"->"v8")
m1 += ("k9"->"v9","k10"->"v10","k11"->"v11")
println("new m1="+m1)
m1 -= "k1"
println("new m1="+m1)
}
/**
* map的遍历
*/
def f3(): Unit ={
val m1 = scala.collection.mutable.Map("k1"->"v1","k2"->"v2","k3"->"v3","k4"->"v4")
for((k,v) <- m1)
print("k="+k+" v="+v+", ")
println()
for(k <- m1.keys)
print("k="+k+", ")
println()
for(v <- m1.values)
print("v="+v+", ")
println()
val m1Revers = for((k,v) <- m1) yield (v,k)
println(m1Revers)
}
/**
* 有序Map
*/
def f4(): Unit ={
val m1 = scala.collection.immutable.SortedMap("k8"->"v8","k7"->"v7","k6"->"v6","k5"->"v5")
for((k,v) <- m1)
print(k+", ")
println()
val mx1 = scala.collection.mutable.TreeSet("k8"->"v8","k7"->"v7","k6"->"v6","k5"->"v5")
for((k,v) <- mx1)
print(k+", ")
println()
val mx2 = scala.collection.mutable.LinkedHashMap("k8"->"v8","k7"->"v7","k6"->"v6","k5"->"v5")
for((k,v) <- mx2)
print(k+", ")
}
/**
* 数组的zip方法会返回一个Tuple的集合
*
*/
def f5(): Unit ={
val names = Array("杰森斯坦森","郭达","绿巨人")
val age = Array(29,39,190)
val nameAge = names.zip(age)
println(nameAge.getClass.getName+" "+nameAge)
for((k,v) <- nameAge)
print(k+","+v+" ; ")
}
}
object T2{
def main(args: Array[String]): Unit = {
val t = new T2
t.f5()
}
}