创建Map
创建一个不可变的Map,import scala.collection.mutable.Map
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
stringToInt("Zhao") = 19
上述代码如果会报错,Error:(12, 5) value update is not a member of scala.collection.immutable.Map[String,Int]
stringToInt("Zhao") = 19
创建一个可变的Map,
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
stringToInt("Zhao") = 19
println(stringToInt("Zhao"))
当然,还有一种定义map的方法,使用()
val stringToInt2 = Map(("zhao",22),("jun",23),("feng",24))
创建一个空的HashMap
val nameToAge = new HashMap[String, Int]
访问Map的元素
获取指定key对应的value,如果key不存在,会报错
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
stringToInt("Zhao") = 19
println(stringToInt("Zhao"))
println(stringToInt("zhao"))
会报,java.util.NoSuchElementException: key not found: zhao
使用contains函数检查key是否存在
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
var age = if(stringToInt.contains("Zhao")) stringToInt("Zhao") else 0
println(age)
age = if(stringToInt.contains("zhao")) stringToInt("zhao") else 0
println(age)
getOrElse函数
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
var age = stringToInt.getOrElse("Zhao", 0)
println(age)
age = stringToInt.getOrElse("zhao", 0)
println(age)
修改Map的元素
更新Map的元素
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
stringToInt("Zhao") = 50
增加多个元素
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
stringToInt += ("Xiang" -> 21, "Bin" -> 22)
移除元素
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
stringToInt -= "Zhao"
更新不可变的map,生成新的map
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
val stringToInt2 = stringToInt + ("Xiang" -> 21, "Bin" -> 22)
移除不可变map的元素,生成新的map
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
val stringToInt2 = stringToInt - "Zhao"
遍历Map
遍历map的entrySet
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
for((key, value) <- stringToInt){
println(key + "," + value)
}
遍历map的key
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
for(key <- stringToInt.keySet){
println(key)
}
遍历map的value
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
for(key <- stringToInt.values){
println(key)
}
生成新map,反转key和value
val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
val intToString = for((key, value) <- stringToInt) yield (value, key)
for((key, value) <- intToString) {
println(key + ", " + value)
}
SortedMap和LinkedHashMap
SortedMap可以自动对Map的key的排序
val stringToInt = SortedMap(("Zhao",18),("Jun", 19))
for((key, value) <- stringToInt) {
println(key + "," + value)
}
LinkedHashMap可以记住插入entry的顺序
val stringToInt2 = new mutable.LinkedHashMap[String, Int]
stringToInt2 += (("Zhao",18),("Jun", 19))
for((key, value) <- stringToInt2) {
println(key + "," + value)
}
Map的元素类型—Tuple
简单Tuple
val t = ("hello", 18)
访问Tuple
println(t._1)
println(t._2)
zip操作
val name = Array("zhao","qian","sun","li")
val age = Array(18,19,20,21)
val nameToAge = name.zip(age)
for((key,value) <- nameToAge) {
println(key + "," + value)
}