Взаимные преобразования последовательных и параллельных коллекций
Любая последовательная коллекция может быть преобразована в свою параллельную альтернативу вызовом метода par
, причем некоторые типы последовательных коллекций имеют прямой параллельный аналог. Для таких коллекций конвертация эффективна– она занимает постоянное время, так как и последовательная и параллельная коллекция представлены одной и той же структурой данных (за исключением изменяемых хэш-таблиц и хэш-множеств, преобразование которых требует больше времени в первый вызов метода par
, тогда как последующие вызовы par
занимают постоянное время). Нужно заметить, что если изменяемые коллекции делят одну лежащую в основе структуру данных, то изменения, сделанные в последовательной коллекции, будут видны в ее параллельной ответной части.
Последовательные | Параллельные |
---|---|
изменяемые | |
Array |
ParArray |
HashMap |
ParHashMap |
HashSet |
ParHashSet |
TrieMap |
ParTrieMap |
неизменяемые | |
Vector |
ParVector |
Range |
ParRange |
HashMap |
ParHashMap |
HashSet |
ParHashSet |
Другие коллекции, такие, как списки, очереди или потоки, последовательны по своей сути, в том смысле, что элементы должны выбираться один за другим. Такие коллекции преобразуются в свои параллельные альтернативы копированием элементов в схожую параллельную коллекцию. Например, односвязный список преобразуется в стандартную неизменяемую параллельную последовательность, то есть в параллельный вектор.
Любая параллельная коллекция может быть преобразована в её последовательный вариант вызовом метода seq
. Конвертирование параллельной коллекции в последовательную эффективно всегда– оно занимает постоянное время. Вызов seq
на изменяемой параллельной коллекции возвращает последовательную, которая отображает ту же область памяти– изменения, сделанные в одной коллекции, будут видимы в другой.
Преобразования между различными типами коллекций
Параллельные коллекции могут конвертироваться в другие типы коллекций, не теряя при этом своей параллельности. Например, вызов метода 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 |