Список

Оригинальное название: list

Коротко

Упорядоченный набор элементов, к которым можно обращаться по позиции, добавлять новые и удалять старые. Значения в нём могут повторяться.

Что такое «Список»

Список — одна из первых структур, с которой сталкивается программист: товары в корзине, строки CSV-файла, пункты меню, результаты поиска. От множества он отличается тем, что важен порядок и допустимы повторы. От словаря — тем, что элементы адресуются номером, а не произвольным ключом.

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

Списки в разных языках

  • Python: тип list — динамический массив, доступ по индексу быстрый.
  • JavaScript: обычный Array выполняет роль списка.
  • Java: интерфейс List с реализациями ArrayList и LinkedList.
  • PHP: отдельного типа нет, список — это массив с ключами 0, 1, 2 по порядку.

Пример: ловушка списков в PHP

Массив PHP на самом деле упорядоченная хеш-таблица. После удаления элемента ключи не перенумеровываются, и массив перестаёт быть списком:

$cities = ['Москва', 'Казань', 'Пермь'];
unset($cities[1]);

var_dump(array_is_list($cities)); // bool(false)
echo json_encode($cities);        // {"0":"Москва","2":"Пермь"}

$cities = array_values($cities);  // перенумеровать ключи
echo json_encode($cities);        // ["Москва","Пермь"]

На практике это частая причина ошибок в API: фронтенд ждёт JSON-массив, а получает объект. Функция array_is_list() доступна с PHP 8.1. Для кириллицы в выводе json_encode заменит буквы на коды вида \u041c, если не передать флаг JSON_UNESCAPED_UNICODE; в примере вывод упрощён.

Как выбрать структуру

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

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение