Skip to content

Map集合

Scala中的Map和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射

1. Map简介

Map集合存储的是Key-Value键值对数据,数据是无序的,而且Key不能重复,Value允许重复。Map是一个trait,一般情况下,采用伴生对象的apply方法进行构建,默认为不可变集合。

提示

在Scala中,trait是一种类似于接口的特性,可以用来定义对象的行为和特征。实际上就是java中的两个概念interface和abstract的对应的一个概念。

2. 不可变Map

  1. 声明定义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)
}

运行结果:
Alt text

  1. 操作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)
}

执行结果:
Alt text

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)
}

运行结果:
Alt text