Scala Map集合完全指南:从入门到实战应用

导入

在 Scala 中,集合体系与 Python 不同:没有直接名为 Set 的需导入基础类------Set 是 Scala 标准库的核心集合(位于 scala.collection 包下),默认无需手动导入即可使用。但需注意 Scala 的 Set 分为不可变(默认)和可变两种。本文将具体从格式定义到常见操作来讲述集合 Set。

一、Map的定义和创建

定义

Map(映射)是Scala中一种存储键值对(key-value)的数据结构,每个键在Map中是唯一的,通过键可以快速查找到对应的值。

好处

  • 快速查找:通过键可以在常数时间内访问对应的值
  • 数据关联:能够建立有逻辑关联的数据结构
  • 类型安全:编译时检查键值类型
  • 灵活性:支持可变和不可变两种实现方式

语法

scala 复制代码
// 不可变Map
val mapName: Map[KeyType, ValueType] = Map(key1 -> value1, key2 -> value2,...)

// 可变Map (需导入scala.collection.mutable.Map)
val mapName: mutable.Map[KeyType, ValueType] = mutable.Map(key1 -> value2,...)

二、Map的基本操作

案例一:可变Map与不可变Map的基本操作

代码

scala 复制代码
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)
  }
}

结果展示

代码分析

  1. 可变Map创建 :使用scala.collection.mutable.Map创建可变Map,初始包含"alice"和"bob"的成绩
  2. 添加操作 :使用+=操作符直接向可变Map添加"max"的成绩,这会修改原Map
  3. 不可变Map创建 :使用scala.collection.immutable.Map创建不可变Map
  4. 不可变Map添加 :通过+操作符创建新的Map,原Map保持不变,体现了不可变集合的特性
  5. 键值对语法 :使用->操作符创建键值对,语法清晰直观

案例二:Map的增删改查操作

代码

scala 复制代码
package map
9
/*
*
* Map, 映射,表示一种一一对应关系
* 1. 添加
* 2. 删除
* 3. 查询,对应的值
* 4. 遍历,把所有的数据,依次访问
* */
object map02 {
  def main(args: Array[String]): Unit = {
    // 创建可变的Map  键  值  对
    val scores = scala.collection.mutable.Map("alice" -> 90, "bob1" -> 85)
    // 1. 添加
    scores += ("map" -> 100)

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

    // 3. 查询。查看bob的分数. rst 是一个Option类型
    val rst = scores.get("bob1")
    if (rst.isEmpty){
      println("bob1没有成绩")
    } 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}分")
    })
  }
}

结果展示

代码分析

  1. 添加元素 :使用+=操作符添加新的键值对"map" -> 100
  2. 删除元素 :使用-=操作符根据键删除"alice"对应的条目
  3. 查询元素
    • 使用get方法查询,返回Option类型,安全处理可能不存在的键
    • 通过isEmpty判断是否存在,避免空指针异常
    • 使用get方法从Option中提取实际值
  4. 遍历方式一 :使用for循环配合模式匹配,直接解构键值对
  5. 遍历方式二 :使用foreach方法配合case语句,函数式风格遍历
  6. 输出格式 :使用字符串插值s"${key}, ${value}分"格式化输出

三、Map的常用方法详解

添加元素

可变Map

  • +=操作符:map += (key -> value)
  • put方法:map.put(key, value)

不可变Map

  • +操作符:val newMapName: Map[KeyType, ValueType] = oldMapName + (newKey ->newValue)(创建新Map)

查询元素

  • get方法:val valueOption: Option[ValueType] = mapName.get(key) ,返回Option[ValueType],安全查询
  • 直接访问:map(key),键不存在时抛出异常

删除元素(仅可变Map)

  • -=操作符:mapName -= key
  • remove方法:mapName.remove(key)

遍历Map

scala 复制代码
// for循环遍历
for ((key, value) <- map) {
    println(s"$key: $value")
}

// foreach方法遍历
map.foreach { case (key, value) =>
    println(s"$key: $value")
}

四、总结

通过本篇文章的学习,我们全面掌握了Scala中Map集合的核心知识:

核心要点

  1. 两种Map类型:可变Map允许原地修改,不可变Map操作后返回新集合
  2. 安全查询 :使用get方法配合Option类型避免运行时异常
  3. 多种遍历 :支持for循环和foreach两种遍历方式
  4. 丰富操作:提供完整的增删改查API
相关推荐
牛奔11 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌16 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
KYGALYX17 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了17 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法18 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment18 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
Cobyte19 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
程序员侠客行20 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Honmaple20 小时前
QMD (Quarto Markdown) 搭建与使用指南
后端
PP东20 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable