Как работает память
Когда мы сохраняем какое-либо значение, то мы запрашиваем под него определенное место в памяти и компьютер возвращает адрес выданной ячейки.
Речь конечно же об оперативной памяти, как о памяти задействованной при запуске программ и обеспечивающей их работу.
Если же требуется сохранить сразу несколько значений под одним именем, то придуманы такие вещи как - массивы и списки.
Подытожим термины:
1. Область памяти - пространство разделенное на ячейки с присвоенными им адресами
2. Ячейка памяти - коробочка в которую помещается значение в двоичной кодировке.
3. Адрес ячейки памяти - уникальный номер коробочки представленный в шестнадцатиричной системе счисления, например - 0x9B38
Массивы
При создании массивов все значения хранятся непрерывно в памяти, то есть друг за другом.
В массиве все адреса элементов заранее известны, так как зная размер массива можно просто идти по порядку в области памяти.
Связанные списки
Элементы списка располагаются в памяти хаотично, то есть без необходимой очередности.
В каждом элементе хранится адрес следующего элемента, что позволяет спискам не запутываться и всегда находить свои части.
Кстати, чтобы "раскопать" сущность связанных списков, можно создать итераторы и пройтись по объекту с помощью команды next() подобно тому как это работает в памяти
Так что же лучше?
+ Массивы:
- Доступ к элементам: позволяют производить произвольный доступ к любому элементу, так как все адреса ячеек памяти заранее известны, в то время как в списках требуется прохождение по всем элементам.
- Более высокая скорость: благодаря тому же произвольному доступу
+ Списки:
- Более простое удаление: достаточно лишь изменить указатель на ячейку памяти в прошлом элементе относительно удаленного, когда массив будет сдвинут назад на один элемент в ячейках памяти
- Всегда возможна вставка в конец: таким же образом находится хаотичная ячейка памяти, когда в массиве следующая за последним элементом ячейка может быть занята
- Всегда возможна вставка в середину: в то же время массив потребуется переместить в другую область памяти, так как при добавлении придется сдвигать все следующие за новым элементы на один