Типы коллекций

В этом разделе продемонстрированы наиболее распространенные типы коллекций и их методы. В конце этого раздела для получения более подробной информации представлены дополнительные ссылки для более глубокого изучения коллекций.

Три основные категории коллекций

Для коллекций Scala можно выделить три основные категории:

Все они являются базовыми типами и имеют подтипы для конкретных целей, таких как параллелизм (concurrency), кэширование (caching) и потоковая передача (streaming). В дополнение к этим трем основным категориям существуют и другие полезные типы коллекций, включая диапазоны (ranges), стеки (stacks) и очереди (queues).

Иерархия коллекций

В качестве краткого обзора следующие три рисунка показывают иерархию классов и трейтов в коллекциях Scala.

На первом рисунке показаны типы коллекций в пакете scala.collection. Все это высокоуровневые абстрактные классы или трейты, которые обычно имеют неизменяемые и изменяемые реализации.

General collection hierarchy

На этом рисунке показаны все коллекции в пакете scala.collection.immutable:

Immutable collection hierarchy

А на этом рисунке показаны все коллекции в пакете scala.collection.mutable:

Mutable collection hierarchy

В следующих разделах представлены некоторые из распространенных типов.

Общие коллекции

Основные коллекции, используемые чаще всего:

Тип коллекции Неизменяемая Изменяемая Описание
List Линейная неизменяемая последовательность (связный список)
Vector Индексированная неизменяемая последовательность
LazyList Ленивый неизменяемый связанный список, элементы которого вычисляются только тогда, когда они необходимы; подходит для больших или бесконечных последовательностей.
ArrayBuffer Подходящий тип для изменяемой индексированной последовательности
ListBuffer Используется, когда вам нужен изменяемый список; обычно преобразуется в List
Map Итерируемая коллекция, состоящая из пар ключей и значений
Set Итерируемая коллекция без повторяющихся элементов

Как показано, Map и Set бывают как неизменяемыми, так и изменяемыми.

Основы каждого типа демонстрируются в следующих разделах.

В Scala буфер, такой как ArrayBuffer или ListBuffer, представляет собой последовательность, которая может увеличиваться и уменьшаться.
Примечание о неизменяемых коллекциях

В последующих разделах всякий раз, когда используется слово immutable, можно с уверенностью сказать, что тип предназначен для использования в стиле функционального программирования (ФП). С помощью таких типов коллекция не меняется, а при вызове функциональных методов возвращается новый результат - новая коллекция.

Выбор последовательности

При выборе последовательности нужно руководствоваться двумя основными вопросами:

Рекомендуемые универсальные последовательности:

Тип \ Категория Неизменяемая Изменяемая
индексируемая Vector ArrayBuffer
линейный связанный список List ListBuffer

Например, если нужна неизменяемая индексированная коллекция, в общем случае следует использовать Vector. И наоборот, если нужна изменяемая индексированная коллекция, используйте ArrayBuffer.

List и Vector часто используются при написании кода в функциональном стиле. ArrayBuffer обычно используется при написании кода в императивном стиле. ListBuffer используется, когда стили смешиваются, например, при создании списка.

Следующие несколько разделов кратко демонстрируют типы List, Vector и ArrayBuffer.

Подробнее

Для дополнительной информации о коллекциях, см. следующие ресурсы:


Ссылки: