深入理解不可变集合
探索 List、Map、Set 等基础不可变集合,并学习高效使用它们。
深入理解不可变集合 是 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 反馈 — 无需本地设置。
此课程中的所有课时
- 深入理解不可变集合
- 集合上的函数式操作
- 使用 Option、Try 和 Either 处理错误