scala中的Map映射

31 阅读3分钟

1.Map 的定义和创建

Map是一种存储键值对的数据结构,每个键在 Map 中是唯一的。在 Scala 中,我们可以使用多种方式创建 Map。

Map 创建格式:

1.不可变 Map:val mapName: Map[KeyType, ValueType] = Map(key1 -> value1, key2 -> value2,...)

2.可变 Map(需导入scala.collection.mutable.Map):val mapName:

mutable.Map[KeyType, ValueType] = mutable.Map(key1 -> value2,...)

代码如下:

package map

/*
 *
 * Map,映射,表示一种一一对应关系!
 *
 */
object map01 {
  def main(args: Array[String]): Unit = {
    // 创建可变的Map  键 值 对
    val scores = scala.collection.mutable.Map("alice" -> 90, "bob" -> 85)
    // 添加
    scores += ("max" -> 100)

    println(scores)

    // 创建不可变的Map
    val provinceInfo = scala.collection.immutable.Map("42" -> "湖北")
    // provinceInfo += ("14" -> "山西")
    val newInfo = provinceInfo + ("14" -> "山西")
    println(newInfo)
  }
}

运行结果如下:

Snipaste_2025-11-25_10-40-31.png 这里我们首先创建了一个不可变的 Map,它包含了两个键值对,键是学生姓名(字符串类型),值是成绩(整数类型)。然后我们导入了可变 Map 类,并创建了一个可变的 Map。同学们注意,不可变 Map 创建后不能修改,而可变 Map 可以进行添加、删除等操作。

2.Map 的常用方法 - 添加元素

对于可变Map

对于可变 Map,我们可以使用 += 操作符或者 put 方法来添加键值对。

添加元素到可变 Map 的格式(+= 操作符):mapName += (key -> value)
添加元素到可变 Map 的格式(put 方法):mapName.put(key, value)

代码如下:

studentScores2 += ("David" -> 82)

studentScores2.put("Eve", 92)

println(studentScores2)

这里我们使用 += 操作符和 put 方法分别向可变 Map 中添加了新的学生成绩信息,然后打印出 Map,可以看到新的键值对已经添加进去了。

  • 对于不可变 Map(重点讲解重新创建新 Map 的方式)

对于不可变 Map,由于其不可修改的特性,我们需要创建一个新的 Map 来包 含新的元素。
添加元素到不可变 Map 的格式(通过创建新 Map):val newMapName: Map[KeyType, ValueType] = oldMapName + (newKey ->newValue)

代码如下

val newStudentScores1: Map[String, Int] = studentScores1 + ("Frank" -> 75)

println(newStudentScores1)

这里我们通过在原不可变 Map 的基础上添加新的键值对,创建了一个新的Map,原 Map 保持不变。

3.Map 的常用方法 - 查询元素

我们可以使用 get 方法来查询 Map 中的值,或者直接Map(key)。

查询 Map 元素的格式(get 方法):

val valueOption: Option[ValueType] = mapName.get(key)

代码如下:

val aliceScore: Option[Int] = studentScores1.get("Alice")

println(aliceScore)

这里使用 get 方法查询“Alice”的成绩,返回值是一个 Option 类型,它 可能包含值(如果键存在)或者为 None(如果键不存在)。这是 Scala 中处理 可能不存在值的一种安全方式。

4.Map 的常用方法 - 删除元素(仅针对可变 Map

对于可变 Map,我们可以使用 -= 操作符或者 remove 方法来删除键值对。
删除可变 Map 元素的格式(-= 操作符): mapName -= key
删除可变 Map 元素的格式(remove 方法): mapName.remove(key)

代码如下:

studentScores2 -= "Charlie"

studentScores2.remove("David")

println(studentScores2)

代码合集:

package map
object map02 {
  def main(args: Array[String]): Unit = {
    // 创建可变的Map  键 值 对
    val scores = scala.collection.mutable.Map("alice" -> 90, "bob1" -> 85)
    // 1. 添加
    scores += ("max" -> 100)

    // 2. 删除 alice。删除操作是根据key来做的
    scores -= "alice"

    // 3. 查询。查看bob1的分数。rst 是一个option类型
    val rst = scores.get("bob1")
    if(rst.isEmpty){
      println("bob1没有成绩")
    } else {
      println(rst.get)
    }
  }
}

这里我们使用 -= 操作符和 remove 方法分别从可变 Map 中删除了指定的键 值对,并打印出结果,可以看到相应的学生信息已经被删除。

5.Map 的遍历

我们可以使用 for 循环或者 foreach 方法来遍历 Map。

使用 for 循环遍历 Map 的格式:

for ((key, value) <- mapName) {

  // 操作,如打印 key 和 value

}

使用 foreach 方法遍历 Map 的格式:****

mapName.foreach { case (key, value) =>

  // 操作,如打印 key 和 value

}

代码如下:

// 4. 打印scores
println(scores)

// for
for((key,value) <- scores){
  println(s"${key}, ${value}分")
}

// foreach
scores.foreach{
  case (key,value) => println(s"${key}, ${value}分")

运行结果如下: Snipaste_2025-11-25_10-40-18.png 这里展示了两种遍历 Map 的方式,通过键值对的形式打印出每个学生的姓名 和成绩。