在循序和並行集合之間轉換
每個循序集合都可以使用 par
方法轉換成它的並行變體。某些循序集合有直接的並行對應。對於這些集合,轉換是有效的,它會在常數時間內發生,因為循序和並行集合具有相同的資料結構表示(一個例外是可變動態陣列和雜湊集,在第一次呼叫 par
時轉換的成本稍高,但後續呼叫 par
則會花費常數時間)。需要注意的是,對於可變動集合,如果循序集合和並行集合共用基礎資料結構,則循序集合中的變更會在並行集合中可見。
順序 | 平行 |
---|---|
可變 | |
陣列 |
平行陣列 |
雜湊映射 |
平行雜湊映射 |
雜湊集合 |
平行雜湊集合 |
字典樹映射 |
平行字典樹映射 |
不可變 | |
向量 |
平行向量 |
範圍 |
平行範圍 |
雜湊映射 |
平行雜湊映射 |
雜湊集合 |
平行雜湊集合 |
其他集合,例如清單、佇列或串流,在概念上是順序的,因為必須一個接一個地存取元素。這些集合會透過將元素複製到類似的平行集合中來轉換為平行變體。例如,函式清單會轉換為標準不可變平行序列,也就是平行向量。
每個平行集合都可以使用 seq
方法轉換為順序變體。將平行集合轉換為順序集合總是有效的,而且只需要常數時間。對可變平行集合呼叫 seq
會產生一個順序集合,該集合由相同的儲存體支援,因此對一個集合的更新將會反映在另一個集合中。
在不同集合類型之間轉換
除了在順序和並行集合之間轉換之外,集合也可以在不同的集合類型之間轉換。例如,呼叫 toSeq
會將順序集合轉換成順序序列,呼叫並行集合上的 toSeq
會將其轉換成並行序列。一般的規則是,如果 X
有並行版本,則 toX
方法會將集合轉換成 ParX
集合。
以下是所有轉換方法的摘要
方法 | 傳回類型 |
---|---|
toArray |
陣列 |
toList |
List |
toIndexedSeq |
IndexedSeq |
toStream |
Stream |
toIterator |
Iterator |
toBuffer |
Buffer |
toTraversable |
GenTraversable |
toIterable |
ParIterable |
toSeq |
ParSeq |
toSet |
ParSet |
toMap |
ParMap |