Conversiones entre colecciones secuenciales y paralelas
Cada una de las colecciones secuenciales puede convertirse es su versión
paralela mediante la utilización del método par
. Determinadas colecciones
secuenciales disponen de una versión homóloga paralela. Para estas colecciones el
proceso de conversión es eficiente – ocurre en tiempo constante dado que ambas
versiones utilizan la misma estructura de datos interna. Una excepción al caso
anterior es el caso de los hash maps y hash sets mutables, donde el proceso de
conversión es un poco más costoso la primera vez que el método par
es llamado,
aunque las posteriores invocaciones de dicho método ofrecerán un tiempo de ejecución
constante. Nótese que en el caso de las colecciones mutables, los cambios en la
colección secuencial son visibles en su homóloga paralela en el caso de que compartan
la estructura de datos subyacente.
Secuencial | Paralelo |
---|---|
mutable | |
Array |
ParArray |
HashMap |
ParHashMap |
HashSet |
ParHashSet |
TrieMap |
ParTrieMap |
inmutable | |
Vector |
ParVector |
Range |
ParRange |
HashMap |
ParHashMap |
HashSet |
ParHashSet |
Otro tipo de colecciones, como las listas, colas o streams
, son inherentemente
secuenciales en el sentido de que los elementos deben ser accedidos uno tras otro.
La versión paralela de estas estructuras se obtiene mediante la copia de los elementos
en una colección paralela. Por ejemplo, una lista funcional es convertida en una
secuencia paralela inmutable; un vector paralelo.
Cada colección paralela puede ser convertida a su variante secuencial mediante el uso
del método seq
. La conversión de una colección paralela a su homóloga secuencial es
siempre un proceso eficiente – tiempo constante. La invocación del método seq
sobre
una colección paralela mutable retorna una colección secuencial cuya representación interna
es la misma que la de la versión paralela, por lo que posibles actualizaciones en una de las
colecciones serán visibles en la otra.
Conversiones entre diferentes tipo de colecciones
Ortogonal a la conversión entre colecciones secuenciales y paralelas, las colecciones
pueden convertirse entre diferentes tipos. Por ejemplo, la llamada al método toSeq
convierte un conjunto secuencial en una secuencia secuencial, mientras que si invocamos
dicho método sobre un conjunto paralelo obtendremos una secuencia paralela. La regla
general is que si existe una versión paralela de X
, el método toX
convierte la colección
en una colección ParX
A continuación se muestra un resumen de todos los métodos de conversión:
método | Tipo de Retorno |
---|---|
toArray |
Array |
toList |
List |
toIndexedSeq |
IndexedSeq |
toStream |
Stream |
toIterator |
Iterator |
toBuffer |
Buffer |
toTraversable |
GenTraversable |
toIterable |
ParIterable |
toSeq |
ParSeq |
toSet |
ParSet |
toMap |
ParMap |