文章目录
https://docs.scala-lang.org/scala3/book/collections-classes.html
https://docs.scala-lang.org/overviews/collections-2.13/overview.html
scala 集合的三大类型
从较高的层次来看 Scala 集合,主要有以下三个类别可供选择:
- Sequences是元素的顺序集合,可以是索引的(如数组)或线性的(如链表)
- Maps包含键/值对的集合,类似于Java的
Map、Python的dict - Sets是唯一元素的无序集合
所有这些都是基本类型,并且具有用于特定目的的子类型,例如并发、缓存和流式处理。除了这三个主要类别之外,还有其他有用的集合类型,包括ranges, stacks, queues。
下图显示了scala.collection包中的集合类型。这些都是高级抽象类或特征,通常具有不可变和可变的实现。

scala.collection.immutable(不可变集合)
scala.collection.immutable包中的集合保证对每个人都是不可变的。这样的集合在创建后就永远不会改变。因此,您可以相信在不同时间点重复访问相同集合值将始终产生具有相同元素的集合这一事实。
下图显示包scala.collection.immutable中的所有集合:

scala.collection.mutable(可变集合)
scala.collection.mutable包中的集合具有一些更改集合的操作。因此,处理可变集合意味着您需要了解哪些代码在何时更改了哪个集合。
下图显示包scala.collection.mutable中的所有集合:

默认情况下,Scala 总是选择不可变集合。例如,如果只是编写Set而没有任何前缀或没有 Set从某处导入,将获得一个不可变集,如果编写 Iterable将获得一个不可变的可迭代集合,因为这些是从scala包中导入的默认绑定。
常用集合总结
| 集合类型 | 不变的 | 可变的 | 描述 |
|---|---|---|---|
List |
✓ | 线性(链表)、不可变序列。List[T] 是类型 T 的链表。 | |
Vector |
✓ | 一个索引的、不可变的序列。 | |
LazyList |
✓ | 惰性不可变链表,其元素仅在需要时才计算;适用于大型或无限序列。 | |
ArrayBuffer |
✓ | 可变索引序列的首选类型。 | |
ListBuffer |
✓ | 当你想要一个可变的List;通常转换为List。 |
|
Map |
✓ | ✓ | 由成对的键和值组成的可迭代集合。可通过键检索值。 |
Set |
✓ | ✓ | 没有重复元素的可迭代集合。Set中元素类型相同。 |
如上所示,Map和Set有不可变和可变版本。
List、Vector、LazyList、ArrayBuffer、ListBuffer<

Scala集合框架包括不可变集合和可变集合,如immutable的List和mutable的ArrayBuffer。Seq是有序集合的接口,List是不可变链表实现,Vector是高效索引的不可变集合。在选择Seq子类时,Vector适合随机访问和更新,而List适用于线性操作和函数式编程。Map和Set都有可变和不可变版本,Tuple和Option也是重要的集合类型。
最低0.47元/天 解锁文章
304

被折叠的 条评论
为什么被折叠?



