并行集合

并行集合转换

语言

在顺序集合和并行集合之间转换

每个顺序集合都可以使用 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

此页面的贡献者