Программирование  •  10 ноября  2022  •  5 мин чтения

Что такое динамические массивы данных и где они встречаются в обычной жизни

Разбираем, как работают динамические массивы данных в JavaScript: какие команды разработчики используют чаще всего, что влияет на размер массива и причём здесь память.

Что такое динамические массивы данных

Операционная система любого компьютера отвечает за работу с памятью. На каком бы языке разработчик ни написал программу, она будет взаимодействовать с операционной системой, а та — с памятью.

На этом этапе возникают вопросы: как не перерасходовать память и оставить место для других программ. Это важно для работы с переменными динамического размера. Прежде чем перейти к ним, надо разобраться, что такое массивы в целом.

Массив — это упорядоченная коллекция, набор данных, список. Если разработчик назначит какой-то элемент десятым, то он всегда будет десятым в списке, пока разработчик не изменит его позицию. Упорядоченность — это сохранение постоянного порядка в этом массиве. Разработчик может перемещать элементы между собой, но без его участия они всегда будут на своих местах.

Данные могут состоять из набора чисел или набора абсолютно разных значений: число, строка, объект. Это зависит от языка программирования, которому принадлежит массив.

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

В работе с массивами данных разработчики пользуются переменными. Переменные в языках программирования — это ссылка на определённую область памяти, которую предстоит использовать в работе.

Динамические массивы данных — это структура, которая позволяет прямо в процессе написания кода автоматически менять размер массива и освобождать ненужные ячейки. К языкам, где можно динамически управлять размером массива, относятся JavaScript, Python, Java (через ArrayList), C++ (векторы).

На курсе «Фронтенд-разработчик» учат писать и тестировать код, исправлять ошибки и размещать сайт в интернете. Студенты участвуют во всех этапах разработки: от вёрстки дизайн-макета до создания и настройки серверной части.

Как создать динамический массив

Разберём, как с нуля создать динамический массив в JavaScript. Чтобы положить в массив разные данные, то есть цифры и слова, зададим команду:
var array = [1,’cat’,’dog’];
Чтобы получить доступ к любому элементу массива, независимо от его размера, нужно знать только индекс этого элемента.
var cat = array[1];
Нумерация массива начинается с нуля. По мере продвижения вправо индекс увеличивается на единицу для каждого элемента массива

Что произошло на низком уровне, когда инициализировали массив:

1) зарезервировали необходимое количество ячеек памяти начиная с array;
2) поместили ссылку на зарезервированную область в переменную array.

Так работает переменная: для неё резервируется область памяти
Так работает переменная: для неё резервируется область памяти
Материал по теме:
10 структур данных, которые должен знать каждый разработчик

Что ещё можно делать с массивами

Для разработчика, который пишет определённую программу, динамические массивы данных несут одни плюсы: не надо заботиться сколько памяти выделено на этот массив, и сколько элементов он может содержать. Можно спокойно работать.

Но для специалистов, которые разрабатывают язык, динамические массивы связаны с трудностями: нужно найти способ избежать перерасхода памяти и обеспечить хорошую производительность программы.

Например, есть задача сгенерировать список пользователей приложения «Достаевский», которые заказывают пиццу два раза в неделю. Их может быть 5, 50 или 500 — точное количество неизвестно. Если зарезервировать в памяти слишком мало места, код не будет работать, а если с запасом, например сразу на 1000 пользователей, то будет перерасход, и какие-то приложения могут остаться без необходимой памяти.

Структура динамических массивов данных помогает программе занять в памяти ровно тот объём, который нужен для хранения конкретных данных.

Самые распространённые команды при работе с динамическими массивами данных:

● вставка — для добавления элемента по определённому индексу;

● удаление — для удаления элемента из индекса;

● поиск — для поиска элемента по заданному индексу или значению;

● доступ к элементу — обновляет элемент по определённому индексу.

На примере вставки разберём, как работает динамический массив.

Допустим, необходимо вставить элемент в массив. Например, элемент 0 в этом примере массива в позиции индекса 1:

array.splice (1,0,0)
[1, 0, human, cat, dog]
Элементу 0 пока не нашлось места в массиве, но это легко исправить благодаря команде «Вставка»
Элементу 0 пока не нашлось места в массиве, но это легко исправить благодаря команде «Вставка»
Для этого сначала нужно переместить все элементы начиная с позиции индекса 1 на одно место вправо.
При переносе элементов вправо, индекс 1 со значением human дублируется, чтобы его место занял элемент 0
При переносе элементов вправо, индекс 1 со значением human дублируется, чтобы его место занял элемент 0
Теперь можно поместить 0 в расположение индекса 1.
Теперь каждый элемент массива на своём месте
Теперь каждый элемент на своём месте, шалость удалась
Элементы можно добавлять и удалять на любом этапе работы.

Размер динамического массива

Элементы массива хранятся в смежных ячейках памяти. Такая система хранения помогает массиву работать быстрее. При этом размер динамического массива может изменяться во время исполнения программы — когда разработчик последовательно выполняет операции. Это главное отличие динамического массива от статического, размер которого задаётся на момент компиляции программы, то есть перевода исходного кода программы в более простой.

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

Динамические массивы в жизни

Массивы — это структуры данных, в которых хранятся списки элементов. Каждый, кто слушает музыку на смартфоне, ведёт список контактов в телефоне или следит за таблицей лидеров во время соревнований, использует динамические массивы, сам не зная об этом. У массивов бесконечное количество применений, и они очень важны в мире информатики.

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

Совет эксперта

Сергей Некрасов

Когда JavaScript-разработчик работает с массивами, в большинстве случаев ему не приходится думать об их внутреннем устройстве: как меняется размер, выделяется или освобождается память. Для программиста гораздо важнее, чтобы в массив было легко добавлять новые элементы, удалять их или заменять.

Понимание того, как устроен этот процесс, позволяет взглянуть на код под другим углом. То, что JS-разработчик принимает динамичность массивов за данность, не свойственно другим языкам.

Статью подготовили:

Сергей Некрасов
Яндекс Практикум
Наставник на факультете WEB-разработки, Senior Frontend Developer at Truv
Яндекс Практикум
Редактор
Поделиться
Идеи новогодних подарков от нейросети + промокоды на курсы Практикума и акции от партнеров
Mon Jul 15 2024 20:49:52 GMT+0300 (Moscow Standard Time)