順次と並列コレクション間での変換
全ての順次コレクションは、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 |
GenTraversable |
toIterable |
ParIterable |
toSeq |
ParSeq |
toSet |
ParSet |
toMap |
ParMap |