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 последовательное множество преобразует в обычную последовательность, а параллельное– в параллельную. Общий принцип такой: если есть параллельный вариант коллекции 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