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
相关推荐
LSTM971 小时前
如何使用 C# 将 RTF 转换为 PDF
后端
Jing_Rainbow1 小时前
【AI-7 全栈-2 /Lesson16(2025-11-01)】构建一个基于 AIGC 的 Logo 生成 Bot:从前端到后端的完整技术指南 🎨
前端·人工智能·后端
7***53341 小时前
Rust错误处理模式
开发语言·后端·rust
16_one2 小时前
autoDL安装Open-WebUi+Rag本地知识库问答+Function Calling
人工智能·后端·算法
StockPP2 小时前
印度尼西亚股票多时间框架K线数据可视化页面
前端·javascript·后端
3***g2052 小时前
如何使用Spring Boot框架整合Redis:超详细案例教程
spring boot·redis·后端
狂奔小菜鸡2 小时前
Day18 | 深入理解Object类
java·后端·java ee
未秃头的程序猿2 小时前
🔒 从单机到分布式:三大锁机制深度剖析与实战指南
java·后端
得物技术2 小时前
# 一、项目概览 Dragonboat 是纯 Go 实现的(multi-group)Raft 库。 为应用屏蔽 Raft 复杂性,提供易于使用的 NodeH
后端