Map集合
Scala中的Map和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射
1. Map简介
Map集合存储的是Key-Value键值对数据,数据是无序的,而且Key不能重复,Value允许重复。Map是一个trait,一般情况下,采用伴生对象的apply方法进行构建,默认为不可变集合。
提示
在Scala中,trait是一种类似于接口的特性,可以用来定义对象的行为和特征。实际上就是java中的两个概念interface和abstract的对应的一个概念。
2. 不可变Map
- 声明定义Map
scala
def main(args: Array[String]): Unit = {
// scala中kv键值对可以采用特殊的方式构建
val kv = "a" -> 1
val map1 = Map(kv, "b" -> 2, "a" -> 3, "a" -> 4)
val map2 = Map(1 -> "test", 2 -> "hehe", 1 -> "demo")
println(map1)
println(map2)
}
运行结果:
- 操作Map
scala
def main(args: Array[String]): Unit = {
// scala中kv键值对可以采用特殊的方式构建
val kv = "a" -> 1
val map1 = Map(kv, "b" -> 2, "a" -> 3, "a" -> 4)
val map2 = Map(1 -> "test", 2 -> "hehe", 1 -> "demo")
// 添加元素
val map3 = map1 + ("c"->23)
println(map3)
// 批量添加
val map4 = map1 ++ map2
println(map4)
val map5 = map1 + ("c"->23) + ("d"->13) + ("e"->55)
println(map5)
// 删除键值对
val map6 = map1 - "e"
println(map6)
// 修改指定键的值
val map7 = map1 + ("key1" -> 100)
println(map7)
// 访问value
val v1 = map1("a")
println(v1)
}
执行结果:
3. 可变Map
scala
def main(args: Array[String]): Unit = {
// 构建可变Map集合
val map1 = mutable.Map(1->"test", 2->"hello", 4->"jack", 7->"chengdu", 4->"rocket")
println(map1)
// 添加元素
map1.put(99, "demo")
map1.put(2, "jj") //相当于修改
println(map1)
map1.update(3, "java") // 相当于添加
map1.update(7, "centos")
println(map1)
// 删除元素
map1.remove(1)
// map1.clear() 清空元素
println(map1)
// 访问元素
println(map1.mkString(","))
map1.foreach(println)
// scala中为了避免空指针异常,提供Option返回结果类型
// 有两种选择: 1.Some 2.None 如果get()方法则报错:NoSuchElementException
val v1: Option[String] = map1.get(2)
if(v1.isEmpty){
println("没有这个key")
}else{
println(s"获取的结果为: ${v1}")
}
// 或者使用简写形式, 表示没有就返回默认值0
println(v1.getOrElse("无"))
// 获取直接使用Map的简写形式
val v2: String = map1.getOrElse(1, "wuwu")
println(v2)
}
运行结果: