Scala—Collections集合概述
Scala
Scala-集合概述
- Scala
- Scala集合概述
- 1 不可变集合(Immutable Collections)
- 2 可变集合(Mutable Collections)
- 3 Scala 集合类的层次结构
Scala集合概述
在 Scala 中,集合主要分为两大类:可变集合(Mutable Collections)和不可变集合(Immutable Collections)。
1 不可变集合(Immutable Collections)
不可变集合是指该集合对象不可修改,每次修改操作都会返回一个新对象,而不会对原对象进行修改。类似于 Java 中的 String
对象。
-
不可变集合是 Scala 中的默认集合类型,位于
scala.collection.immutable
包中。 -
不可变集合在创建后不能被修改。任何修改操作都会返回一个新的集合,而原来的集合保持不变。
-
常用不可变集合:如
List
、Vector
、Set
、Map
,一旦创建不能修改,所有修改操作返回新集合,适合多线程环境和函数式编程。
2 可变集合(Mutable Collections)
可变集合是指可以直接对原对象进行修改,而不会返回新的对象。类似于 Java 中的 StringBuilder
对象。
-
可变集合可以在原地更新或扩展,可以添加、更改或移除集合中的元素。
-
集合提供了可以直接修改集合的操作。所有的可变集合类都位于 scala.collection.mutable 包中。
-
常用可变集合:如
ArrayBuffer
、ListBuffer
、HashSet
、HashMap
,可以在创建后进行修改,适合需要频繁修改的场景。
3 Scala 集合类的层次结构
Scala 为几乎所有的集合类提供了可变和不可变的版本。
immutable:
不可变集合:scala.collection.immutable
mutable:
可变集合:scala.collection.mutable
Iterable
特质是 Scala 集合类层次结构的顶层特质,定义了许多集合操作的基础行为。
- 作用:返回一个迭代器对象,可以用来逐个访问集合中的元素。
- 特点:这是一个抽象方法,具体的集合类需要实现这个方法。
Scala 所有的集合类都扩展自 Iterable
特质。Iterable
特质定义了 iterator
方法,所有其他方法都是基于这个方法实现的。
方法名 | 方法签名 | 描述 |
---|---|---|
foreach | def foreach[U](f: A => U): Unit | 对集合中的每个元素应用一个函数 f 。 |
map | def map[B](f: A => B): Iterable[B] | 对集合中的每个元素应用一个函数 f ,并返回一个新的集合。 |
flatMap | def flatMap[B](f: A => Iterable[B]): Iterable[B] | 对集合中的每个元素应用一个函数 f ,并将结果展平为一个单一的集合。 |
filter | def filter(p: A => Boolean): Iterable[A] | 筛选出满足条件 p 的元素,并返回一个新的集合。 |
exists | def exists(p: A => Boolean): Boolean | 检查集合中是否存在满足条件 p 的元素。 |
forall | def forall(p: A => Boolean): Boolean | 检查集合中的所有元素是否都满足条件 p 。 |
size | def size: Int | 返回集合中元素的数量。 |
isEmpty | def isEmpty: Boolean | 检查集合是否为空。 |
nonEmpty | def nonEmpty: Boolean | 检查集合是否非空。 |
head | def head: A | 返回集合的第一个元素。如果集合为空,抛出 NoSuchElementException 。 |
last | def last: A | 返回集合的最后一个元素。如果集合为空,抛出 NoSuchElementException 。 |
tail | def tail: Iterable[A] | 返回去掉第一个元素后的集合。如果集合为空,抛出 UnsupportedOperationException 。 |
init | def init: Iterable[A] | 返回去掉最后一个元素后的集合。如果集合为空,抛出 UnsupportedOperationException 。 |
take | def take(n: Int): Iterable[A] | 返回集合的前 n 个元素。 |
drop | def drop(n: Int): Iterable[A] | 返回去掉前 n 个元素后的集合。 |
takeWhile | def takeWhile(p: A => Boolean): Iterable[A] | 返回集合中满足条件 p 的最长前缀。 |
dropWhile | def dropWhile(p: A => Boolean): Iterable[A] | 返回去掉满足条件 p 的最长前缀后的集合。 |
foldLeft | def foldLeft[B](z: B)(op: (B, A) => B): B | 从左到右将集合中的元素聚合为一个值。 |
foldRight | def foldRight[B](z: B)(op: (A, B) => B): B | 从右到左将集合中的元素聚合为一个值。 |
reduceLeft | def reduceLeft[B >: A](op: (B, A) => B): B | 从左到右将集合中的元素聚合为一个值,初始值为集合的第一个元素。 |
reduceRight | def reduceRight[B >: A](op: (A, B) => B): B | 从右到左将集合中的元素聚合为一个值,初始值为集合的最后一个元素。 |
min | def min(implicit ord: Ordering[A]): A | 返回集合中的最小元素。 |
max | def max(implicit ord: Ordering[A]): A | 返回集合中的最大元素。 |
sum | def sum(implicit num: Numeric[A]): A | 返回集合中所有元素的和。 |
product | def product(implicit num: Numeric[A]): A | 返回集合中所有元素的乘积。 |
toList | def toList: List[A] | 将集合转换为 List 。 |
toSeq | def toSeq: Seq[A] | 将集合转换为 Seq 。 |
toArray | def toArray: Array[A] | 将集合转换为 Array 。 |
toSet | def toSet: Set[A] | 将集合转换为 Set 。 |
toMap | def toMap[K, V](implicit ev: A <:< (K, V)): Map[K, V] | 将集合转换为 Map ,要求集合中的元素是键值对。 |
由于篇幅问题,大家先对Scala中的集合有一个系统的概念,后续各个集合的具体使用会持续更新。
整理不易,列位多多支持谢谢啦🤣🤣🤣