玩转 Scala Map

51 阅读2分钟

Scala 中的 Map 是一种键值对(Key-Value)映射结构,类似于 Java 中的 HashMap/TreeMap,但 Scala 对其进行了更简洁、更函数式的封装。Map 分为可变不可变两种类型,分别适用于不同的业务场景。本文将从基础创建、核心操作(增删查改)、遍历方式等维度,手把手带你掌握 Scala Map 的使用。

一、Scala Map 的核心特性

Scala 的 Map 主要有两个核心实现:

  • 不可变 Map(默认):创建后无法修改,任何 “修改” 操作都会生成新的 Map,线程安全。
  • 可变 Map:需显式导入scala.collection.mutable.Map,支持原地修改,性能更高。

两者的核心区别在于:不可变 Map 强调 “不可变” 的函数式编程思想,可变 Map 则更贴近传统命令式编程的使用习惯。

二、快速上手:创建 Map

2.1 创建可变 Map

通过scala.collection.mutable.Map创建,支持后续原地增删改:

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.mutable.Map("42" -> "湖北")
    provinceInfo += ("14" -> "山西")
    val newInfo =  provinceInfo + ("14" -> "山西")
    println(newInfo)
  }

}

二、可变 Map 的核心操作

以成绩管理场景为例,演示可变 Map 的增、删、查、遍历:

package map

/*
Map 映射,表示一种—一对应关系
1. 添加
2. 删除
3.查询,对应的值
4.遍历
 */

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

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

    // 3. 查:查看bob的分数,rest是一个option类型
    val rst = scores.get("bob")
    if(rst.isEmpty) {
      println("bob没有成绩")
    } else {
      println(rst.get)
    }
    //4.打印scores
    println(scores)
    //for
    for((key,value) <- scores) {
      println(s"${key},${value}分")
    }
    //foreach
    scores.foreach({
      case (key,value) => println(s"${key},${value}分")
    })
  }
}

总结

Scala Map 的设计兼顾了命令式(可变 Map)和函数式(不可变 Map)编程风格,核心是理解 “不可变” 的思想 —— 不可变 Map 的所有修改操作都是生成新实例,而可变 Map 则是原地修改。掌握增删查改和遍历的核心语法,结合 Option 类型做安全查询,就能轻松应对日常开发中的映射场景。