Scala Map集合详解:从入门到实战应用技巧
时间:2026-08-15 | 作者:半糖攻略君 | 阅读:0导入
说到 Scala 里的集合体系,它和 Python 还真不太一样。
很多人一开始会以为没有一个直接叫 Set 的基础类型需要单独导入,其实不是这么回事。Set 本身就是 Scala 标准库里的核心集合之一,位于 scala.collection 包下,通常默认就能直接使用,不需要手动导入。
不过有个关键点一定得分清:Scala 里的 Set 分成两类,一种是默认的不可变 Set,另一种是可变 Set。
接下来,文章就从定义格式讲起,再一步步展开到 Set 的常见操作。
一、Map的定义和创建
定义
Map(映射)是Scala中一种存储键值对(key-value)的数据结构。
每个键在Map中是唯一的,通过键可以快速查找到对应的值。
好处
- 快速查找:通过键可以在常数时间内访问对应的值
- 数据关联:能够建立有逻辑关联的数据结构
- 类型安全:编译时检查键值类型
- 灵活性:支持可变和不可变两种实现方式
语法
// 不可变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的基本操作
代码
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)
}
}
结果展示
代码分析
- 可变Map创建:使用
scala.collection.mutable.Map创建可变Map,初始包含"alice"和"bob"的成绩。 - 添加操作:使用
+=操作符直接向可变Map添加"max"的成绩,这会修改原Map。 - 不可变Map创建:使用
scala.collection.immutable.Map创建不可变Map。 - 不可变Map添加:通过
+操作符创建新的Map,原Map保持不变,体现了不可变集合的特性。 - 键值对语法:使用
->操作符创建键值对,语法清晰直观。
案例二:Map的增删改查操作
代码
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}分")
})
}
}
结果展示
代码分析
- 添加元素:使用
+=操作符添加新的键值对"map" -> 100。 - 删除元素:使用
-=操作符根据键删除"alice"对应的条目。 - 查询元素:
- 使用
get方法查询,返回Option类型,安全处理可能不存在的键。 - 通过
isEmpty判断是否存在,避免空指针异常。 - 使用
get方法从Option中提取实际值。
- 使用
- 遍历方式一:使用
for循环配合模式匹配,直接解构键值对。 - 遍历方式二:使用
foreach方法配合case语句,函数式风格遍历。 - 输出格式:使用字符串插值
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 -= keyremove方法:mapName.remove(key)
遍历Map
// for循环遍历
for ((key, value) <- map) {
println(s"$key: $value")
}
// foreach方法遍历
map.foreach { case (key, value) =>
println(s"$key: $value")
}
四、总结
通过本篇文章的学习,我们全面掌握了Scala中Map集合的核心知识:
核心要点
- 两种Map类型:可变Map允许原地修改,不可变Map操作后返回新集合。
- 安全查询:使用
get方法配合Option类型避免运行时异常。 - 多种遍历:支持
for循环和foreach两种遍历方式。 - 丰富操作:提供完整的增删改查API。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 永恒龙族天赋符文搭配与核心流派实战详解
- 时间:2026-07-31
-
- Akintor玩法与高阶技巧实战应用指南
- 时间:2026-07-30
-
- 遗忘之海茉莉技能机制与实战应用详解
- 时间:2026-07-29
-
- 遗忘之海胡话先知强度解析与实战应用指南
- 时间:2026-07-25
-
- 烟雨江湖风神腿法高阶详解与实战应用
- 时间:2026-07-21
-
- 遗忘之海盖尔全技能效果与实战应用指南
- 时间:2026-07-21
-
- 梦之形手机版光之射线技能伤害机制与实战应用
- 时间:2026-07-20
-
- 梦之形手机版光之射线技能详解与实战应用
- 时间:2026-07-13
精选合集
更多大家都在玩
大家都在看
更多-
- 以下哪种食材被称为“地下苹果” 蚂蚁庄园今日答案9.18
- 时间:2026-09-17
-
- 蚂蚁庄园今天答题答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园答题今日答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园小课堂2026年9月18日最新题目答案
- 时间:2026-09-17
-
- 小鸡答题今天的答案是什么2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园每日答题答案2026年9月18日
- 时间:2026-09-17
-
- 蔬菜洗完掉色,说明是被染色了,是真的吗 蚂蚁庄园今日答案9月18日
- 时间:2026-09-17
-
- 满襟蜡绘花纹巧染就花纹当绣裳说的是哪种传统技艺 蚂蚁新村今日答案2026.9.17
- 时间:2026-09-17