Scala for Backend Engineering & Functional Programming · 课时

深入理解不可变集合

探索 List、Map、Set 等基础不可变集合,并学习高效使用它们。

第 1 / 3 课11 个步骤

深入理解不可变集合 是 CoddyKit 上的免费 Scala for Backend Engineering & Functional Programming 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Scala for Backend Engineering & Functional Programming 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。

不可变集合:概览

欢迎学习不可变集合!在 Scala 中,它们是编写健壮、并发安全且可预测代码的基础,尤其适用于函数式编程。

我们将探讨 List、Map 和 Set 等基本类型,重点了解如何高效且安全地使用它们。

不可变性为何重要

不可变性意味着集合一旦创建,就不能再更改。任何看似“修改”集合的操作,实际上都会返回一个新集合。

  • 可预测性:更容易理解代码的行为。
  • 线程安全:由于数据不会改变,因此无需使用锁。
  • 无副作用:操作不会意外更改其他地方的数据。

Scala 列表:有序序列

Scala 中的 List 是由相同类型元素组成的不可变有序序列。它非常适合处理顺序很重要的序列数据。

只需列出各个元素即可创建列表。

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(1, 2, 3, 4, 5)
    val fruits = List("apple", "banana", "cherry")
    println(s"Numbers list: $numbers")
    println(s"Fruits list: $fruits")
  }
}

列表操作:头部、尾部与 Cons

列表提供了常见操作,例如获取 head(第一个元素)和 tail(列表其余部分)。::(cons)运算符用于将元素添加到列表开头,从而创建一个新列表。

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(10, 20, 30)
    println(s"Original list: $numbers")
    println(s"Head of list: ${numbers.head}") // 10
    println(s"Tail of list: ${numbers.tail}") // List(20, 30)
    val newList = 5 :: numbers // Prepend 5
    println(s"List with 5 prepended: $newList")
  }
}

Scala 映射:键值关联

Map 是一种存储键值对的不可变集合。每个键都是唯一的,并映射到一个值。Map 非常适合根据特定键查找值。

object Main {
  def main(args: Array[String]): Unit = {
    val ages = Map("Alice" -> 30, "Bob" -> 25, "Charlie" -> 35)
    val codes = Map(1 -> "One", 2 -> "Two")
    println(s"Ages map: $ages")
    println(s"Codes map: $codes")
  }
}

映射操作:访问与更新

您可以使用键访问 Map 中的值。要“更新”或“添加”键值对,需要创建一个包含这些更改的新映射,而原映射保持不变。

object Main {
  def main(args: Array[String]): Unit = {
    val ages = Map("Alice" -> 30, "Bob" -> 25)
    println(s"Original ages: $ages")
    println(s"Bob's age: ${ages("Bob")}")
    val updatedAges = ages + ("Charlie" -> 35) // Add new pair
    println(s"Ages after adding Charlie: $updatedAges")
    val changedAges = updatedAges + ("Alice" -> 31) // Update Alice's age
    println(s"Ages after updating Alice: $changedAges")
  }
}

Scala 集合:唯一元素

Set 是由唯一元素组成的不可变集合。与 List 不同,Set 中元素的顺序不受保证,重复元素会被自动忽略。

Set 非常适合检查成员关系或确保元素唯一。

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = Set(1, 2, 2, 3, 4, 3, 5)
    val letters = Set('a', 'b', 'a')
    println(s"Unique numbers: $numbers")
    println(s"Unique letters: $letters")
  }
}

集合操作:添加、删除与并集

与 List 和 Map 类似,对 Set 执行添加或删除元素等操作也会返回一个新 Set。您还可以执行集合论操作,例如 union(合并集合)。

object Main {
  def main(args: Array[String]): Unit = {
    val setA = Set(1, 2, 3)
    val setB = Set(3, 4, 5)
    println(s"Set A: $setA")
    println(s"Set B: $setB")
    val addedSet = setA + 4 // Add element
    println(s"Set A + 4: $addedSet")
    val removedSet = setA - 2 // Remove element
    println(s"Set A - 2: $removedSet")
    val unionSet = setA union setB // Combine sets
    println(s"Set A union Set B: $unionSet")
  }
}

不可变性:原集合保持不变

请务必记住,对 Scala 不可变集合执行的所有“修改”操作都会返回一个新集合。原集合永远不会改变。

这种行为是 Scala 函数式编程的基石。

object Main {
  def main(args: Array[String]): Unit = {
    val originalList = List(10, 20, 30)
    println(s"Original List: $originalList")
    val doubledList = originalList.map(_ * 2) // map returns a NEW list
    println(s"List after map: $doubledList")
    println(s"Original list is still: $originalList") // Unchanged!
  }
}

检查您的理解

请思考下面的 Scala 代码片段:

val mySet = Set(1, 2, 3)
val newSet = mySet + 3 + 4
val finalSet = newSet - 2

执行这些操作后,mySet 的值是多少?

回顾:不可变集合

您已经深入学习了 Scala 的基本不可变集合:

  • List:有序序列,适合处理序列数据。
  • Map:键值对,适合高效查找。
  • Set:唯一元素,非常适合检查成员关系。

关键要点是不可变性:操作始终返回新集合,从而确保可预测性和安全性。

免费开始

用 AI 导师学习 Scala — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
39
课程
143

常见问题解答

「深入理解不可变集合」课时是免费的吗?

是的 — 「深入理解不可变集合」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Scala for Backend Engineering & Functional Programming 课程的其余内容,请升级到 CoddyKit PRO。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。

「深入理解不可变集合」这节课中我会学到什么?

探索 List、Map、Set 等基础不可变集合,并学习高效使用它们。 你通过在浏览器中直接运行的动手代码来练习 Scala for Backend Engineering & Functional Programming,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Scala for Backend Engineering & Functional Programming 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Scala for Backend Engineering & Functional Programming 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「深入理解不可变集合」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Scala for Backend Engineering & Functional Programming 课中编写并运行代码吗?

能。每节 Scala for Backend Engineering & Functional Programming 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 深入理解不可变集合
  2. 集合上的函数式操作
  3. 使用 Option、Try 和 Either 处理错误
← 返回 Scala for Backend Engineering & Functional Programming