在顺序集合和并行集合之间转换
每个顺序集合都可以使用 par
方法转换为其并行变体。某些顺序集合具有直接的并行对应项。对于这些集合,转换是高效的——它发生在常量时间内,因为顺序集合和并行集合具有相同的数据结构表示(一个例外是可变哈希映射和哈希集,在第一次调用 par
时转换成本稍高,但后续调用 par
会花费常量时间)。应当注意,对于可变集合,如果顺序集合和并行集合共享底层数据结构,则顺序集合中的更改在其并行对应项中可见。
顺序 | 并行 |
---|---|
可变 | |
数组 |
并行数组 |
哈希映射 |
并行哈希映射 |
哈希集 |
并行哈希集 |
字典树映射 |
并行字典树映射 |
不可变 | |
矢量 |
并行矢量 |
范围 |
并行范围 |
哈希映射 |
并行哈希映射 |
哈希集 |
并行哈希集 |
其他集合(如列表、队列或流)本质上是顺序的,因为必须一个接一个地访问元素。这些集合通过将元素复制到类似的并行集合中而转换为其并行变体。例如,函数式列表将转换为标准不可变并行序列,即并行矢量。
可以使用 seq
方法将每个并行集合转换为其顺序变体。将并行集合转换为顺序集合始终是高效的,它需要恒定时间。对可变并行集合调用 seq
会产生一个顺序集合,该集合由同一存储库支持,对一个集合的更新将在另一个集合中可见。
在不同集合类型之间转换
除了在顺序集合和并行集合之间转换之外,集合还可以在不同的集合类型之间转换。例如,调用 toSeq
将顺序集合转换为顺序序列,而对并行集合调用 toSeq
将其转换为并行序列。一般规则是,如果 X
有并行版本,则 toX
方法会将集合转换为 ParX
集合。
以下是所有转换方法的摘要
方法 | 返回类型 |
---|---|
toArray |
数组 |
toList |
列表 |
toIndexedSeq |
IndexedSeq |
toStream |
流 |
toIterator |
迭代器 |
toBuffer |
缓冲区 |
toTraversable |
GenTraversable |
toIterable |
ParIterable |
toSeq |
ParSeq |
toSet |
ParSet |
toMap |
ParMap |