Parallel Collections

並列コレクションへの変換

Language

順次と並列コレクション間での変換

全ての順次コレクションは、par メソッドを用いて何らかの並列コレクションへと変換できる。 順次コレクションのいくつかには、直接対応する並列版を持つものがあり、それらのコレクションの変換は効率的だ。 順次と並列コレクションが同じデータ構造で表現されているため変換は定数時間で実行される(唯一の例外は初回の par が少し高価である可変ハッシュマップと可変ハッシュ集合だが、二回目以降の par の呼び出しは定数時間で行われる)。 また、可変コレクションに関しては、同じ内部構造を共有する場合、順次コレクションで行われた更新はそれに対応する並列版からも見えていることに注意して欲しい。

順次 並列
可変  
Array ParArray
HashMap ParHashMap
HashSet ParHashSet
TrieMap ParTrieMap
不変  
Vector ParVector
Range ParRange
HashMap ParHashMap
HashSet ParHashSet

リスト、キュー、ストリーム等、その他のコレクションは、要素を順番にアクセスしなければいけないという意味で本質的に逐次的だ。それらのコレクションは、似ている並列コレクションに要素をコピーすることで、並列版に変換される。 例えば、リストは標準の並列不変列である並列ベクトルに変換される。

全ての並列コレクションは、seq メソッドを用いて何らかの順次コレクションに変換できる。 並列コレクションから順次コレクションへの変換は常に効率的で、定数時間で実行される。 並列可変コレクションに対して seq を呼び出すと、同じ内部構造にデータを格納した順次コレクションを返す。 そのため、コレクションの変更は、他方にも見えることになる。

異なるコレクション型の間での変換

順次と並列コレクション間での変換とは直交して、コレクションは別のコレクション型でも変換できる。 例えば、toSeq を呼び出すことで順次集合を順次列に変換できるが、toSeq を呼び出して並列集合を並列列に変換することもできる。 一般的なルールとしては、X に並列版があれば、toX メソッドは、そのコレクションを ParX コレクションに変換する。

以下の表に全ての変換をまとめる:

メソッド 戻り値の型
toArray Array
toList List
toIndexedSeq IndexedSeq
toStream Stream
toIterator Iterator
toBuffer Buffer
toTraversable GenTraverable
toIterable ParIterable
toSeq ParSeq
toSet ParSet
toMap ParMap