Scala Collection(集合)学习笔记

Scala提供了一套功能强大的集合类库。Scala的集合框架包含序列、集合和映射等数据结构,它们都是不可变的(immutable),而且非常灵活,可以适应各种编程场景。

集合类型

在Scala中,可以将集合分为可变集合和不可变集合两种类型:

不可变集合

不可变集合意味着一旦创建集合对象之后,就不能再添加、删除或修改其中的元素,只能通过创建新的集合来完成这些操作。Scala的不可变集合有以下几种类型:

  • List:列表
  • Set:集合
  • Map:映射
  • Tuple:元组

可变集合

可变集合允许在集合中进行添加、删除和修改元素的操作。

Scala的可变集合有以下几种类型:

  • MutableList:可变列表
  • ArrayBuffer:可变数组
  • MutableSet:可变集合
  • HashMap:可变映射

常用操作

下面是一些常见的集合操作:

1. 创建集合

ScalaCopy Code
// 不可变集合 val list = List(1, 2, 3) val set = Set("apple", "banana", "orange") val map = Map(1 -> "one", 2 -> "two", 3 -> "three") // 可变集合 val mSet = mutable.Set("apple", "banana", "orange") val mList = mutable.MutableList(1, 2, 3) val mMap = mutable.HashMap("one" -> 1, "two" -> 2, "three" -> 3)

2. 遍历集合

ScalaCopy Code
// 遍历不可变集合 for (elem <- list) { println(elem) } // 遍历可变集合 for (elem <- mSet) { println(elem) }

3. 过滤集合

ScalaCopy Code
// 过滤不可变集合 val filteredList = list.filter(_ > 1) val filteredSet = set.filter(_.contains("a")) val filteredMap = map.filterKeys(_ > 2) // 过滤可变集合 mSet.filterInPlace(_.contains("a")) mList.filterInPlace(_ > 1) mMap.filterInPlace((k, v) => k.length == v)

4. 映射集合

ScalaCopy Code
// 映射不可变集合 val mappedList = list.map(_ * 2) val mappedSet = set.map(_.toUpperCase) val mappedMap = map.mapValues(_.toUpperCase) // 映射可变集合 mSet.mapInPlace(_.toUpperCase) mList.mapInPlace(_ * 2) mMap.transform((k, v) => v.toUpperCase)

实例

以下是一个关于使用Scala集合库的实例:

ScalaCopy Code
import scala.collection.mutable.ArrayBuffer object Test { def main(args: Array[String]) { // 创建一个空的可变数组 val arr = ArrayBuffer[Int]() // 添加元素到数组中 arr += 1 arr += 2 arr += 3 // 打印数组元素 println(arr) // 过滤数组中的偶数 arr.filterInPlace(_ % 2 == 1) println(arr) // 将数组中的元素映射为它们的平方 arr.mapInPlace(x => x * x) println(arr) } }

该程序创建了一个空的可变数组,添加了一些元素,过滤出数组中的奇数,然后将数组中的元素映射为它们的平方。运行该程序,输出如下:

Copy Code
ArrayBuffer(1, 2, 3) ArrayBuffer(1, 3) ArrayBuffer(1, 9)

这个实例展示了Scala集合库的一些常见用法,包括创建集合、遍历集合、过滤集合和映射集合等。