Линейные структуры данных во фронтенде
Линейные структуры данных упорядочивают элементы в последовательность. У каждого элемента есть один предшественник и один последователь.
Массивы Массивы — основной инструмент в JavaScript. Они используют непрерывную память. Это позволяет мгновенно получать доступ к любому элементу по его индексу.
- push: добавляет элемент в конец.
- unshift: добавляет элемент в начало. Это медленная операция, так как каждый другой элемент должен сдвинуться на одну позицию вправо.
- splice: добавляет или удаляет элементы в любой позиции. Этот метод изменяет исходный массив. Это не чистая функция.
Примечание: когда массив становится слишком большим, JavaScript должен выделить более крупный блок памяти и скопировать туда все данные. Это снижает производительность.
Стеки Стек следует правилу LIFO: Last In, First Out (последним пришел — первым ушел). Представьте стопку тарелок. Вы добавляете или убираете элементы только сверху.
- push: добавить на вершину.
- pop: удалить с вершины.
- peek: посмотреть на верхний элемент, не удаляя его.
Очереди Очередь следует правилу FIFO: First In, First Out (первым пришел — первым ушел). Представьте очередь в магазине.
- push: добавить в конец.
- shift: удалить из начала.
Внимание: использование shift в массиве работает медленно на больших наборах данных. Каждый элемент должен сдвинуться влево, чтобы заполнить пустоту. Для больших объемов данных вместо этого используйте связный список.
Связные списки Связный список состоит из узлов. Каждый узел содержит данные и указатель на следующий узел.
- Преимущества: добавление или удаление узлов происходит быстро, как только вы нашли нужное место. Вы меняете только указатели.
- Недостатки: вы не можете мгновенно перейти к определенному индексу. Вам нужно начинать с головы (head) и переходить по указателям один за другим. Это медленно.
Сводное сравнение:
- Массивы: лучше всего подходят для частого чтения и небольших объемов данных. Доступ — O(1).
- Связные списки: лучше всего подходят для частой записи и больших объемов данных. Вставка — O(1), если у вас есть ссылка на узел.
Профессиональные советы для JavaScript:
- Не смешивайте типы данных в массиве. Поддержание единообразия типов помогает движку использовать непрерывную память.
- Всегда используйте функцию сравнения (comparator) при сортировке чисел. [10, 2].sort() вернет [10, 2], так как сортировка происходит как для строк.
- Помните, что большинство встроенных методов массивов изменяют исходный массив.