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 类型做安全查询,就能轻松应对日常开发中的映射场景。