Коллекция (программирование)


Коллекция в программировании — программный объект, содержащий в себе, тем или иным образом, набор значений одного или различных типов, и позволяющий обращаться к этим значениям.

Коллекция позволяет записывать в себя значения и извлекать их. Назначение коллекции — служить хранилищем объектов и обеспечивать доступ к ним. Обычно коллекции используются для хранения групп однотипных объектов, подлежащих стереотипной обработке. Для обращения к конкретному элементу коллекции могут использоваться различные методы, в зависимости от её логической организации. Реализация может допускать выполнение отдельных операций над коллекциями в целом. Наличие операций над коллекциями во многих случаях может существенно упростить программирование.

Коллекция или контейнер группирует некоторое переменное (возможно, нулевое) число элементов данных, которые имеют некоторое общее значение для решения проблемы. Над ними проводятся операции некоторым способом. Обычно элементы данных имеют один и тот же тип, или же (в языках, поддерживающих наследование) типы будут получены из некоторого общего типа-предка. Коллекция — понятие, применимое к абстрактным типам данных, и не предписывает определённую реализацию через конкретную структуру данных, хотя часто существует устоявшийся выбор. Контейнеры в теории типов — абстракции, которые разрешают коллекциям различных структур, таких как списки и деревья, быть представленными некоторым однородным способом. (Унарный) контейнер определён индексами S и семейством типов на позициях P, индексируемыми через S: задана функция от типов индексов к типу элементов. Контейнеры можно рассматривать как канонические классы для коллекций различных типов. Списки индексируются через натуральные числа (включая ноль). Для списков определён максимальный индекс. Для деревьев структура дерева может быть выражена через индексы без конкретной информации о содержимом узлов. Индексы элементов структуры в памяти изоморфны путям от корня дерева до его узлов.

В зависимости от того, как логически организован доступ к данным коллекции, выделяются следующие основные типы:

В зависимости от логического типа коллекции и от реализации могут поддерживаться различные операции над коллекциями в целом. Во всех случаях операции могут производиться только над парами коллекций одного типа (и, если коллекции не гетерогенные, с одним типом элементов). Могут поддерживаться также следующие операции: