Scala面试题更新 2026-08-05

请阐述 Scala 里 List、Set、Map 这些集合类型的基本特性,并说明在实际的数据处理操作中分别如何运用它们?

编码实现技术原理Scala

考察说明

考查考生对 Scala 常用不可变集合的理解与实际操作能力。

回答思路

  1. 【回答框架 1】Scala 集合主要分为不可变和可变两类,默认使用的是不可变集合,位于 scala.collection.immutable 包下。List 是链表结构,适合顺序访问和头部添加操作,Set 是无序且元素唯一的集合,Map 则存储键值对。三者均为不可变,每次操作返回新集合。
  2. 【回答框架 2】List 通常用于需要保持元素顺序的场景,常用方法包括 :: 在头部添加元素、::: 拼接列表、map 对每个元素进行映射转换、filter 筛选满足条件的元素,例如 list.map(_ * 2) 对每个元素乘 2。
  3. 【回答框架 3】Set 用于去重或集合运算,常用操作有 + 添加元素、- 移除元素、intersect 取交集、union 取并集、diff 取差集,例如 set1.intersect(set2) 获取两个集合共同元素。
  4. 【回答框架 4】Map 用于键值对存储,支持 get 获取值、getOrElse 带默认值获取、+ 添加或更新键值对、- 移除键,以及 mapValues 对值进行转换,例如 map.getOrElse(key, 0) 避免键不存在时的异常。
  5. 【回答框架 5】实际数据处理中常结合高阶函数和模式匹配,如用 map 实现数据清洗,用 flatMap 处理嵌套集合,用 groupBy 按条件分组,用 foldLeft 进行聚合,最终通过 toList 或 toMap 在集合类型间转换。
  6. 【关键点 1】Scala 默认不可变,操作返回新集合,可变集合需显式引入 mutable 包。
  7. 【关键点 2】List 适合顺序和递归处理,Set 保证唯一性,Map 适合键值查找。
  8. 【关键点 3】高阶函数如 map、filter、foldLeft 等是集合处理的核心。
  9. 【关键点 4】集合类型间可相互转换,如 toList、toSet、toMap。
  10. 【易错点 1】混淆不可变与可变集合,盲目使用可变集合可能导致并发问题。
  11. 【易错点 2】忽略 Set 和 Map 的无序性,依赖插入顺序时应使用 ListMap 或 Vector。
  12. 【易错点 3】对不可变集合频繁修改时未注意性能,应选择合适的数据结构。