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 Codeimport 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 CodeArrayBuffer(1, 2, 3)
ArrayBuffer(1, 3)
ArrayBuffer(1, 9)
这个实例展示了Scala集合库的一些常见用法,包括创建集合、遍历集合、过滤集合和映射集合等。