
Я узнал, что некоторые вещи, которые могут быть полностью приемлемы для одного языка программирования, не подходят для другого. Эти обычаи, синтаксис или индексы не обязательно переводятся. Даже некоторые вещи, которые мы считаем неприемлемыми и просто ужасающими, не универсальны.
Так обстоит дело и с нашим любимым массивом.
Ниже приведен список языков, у которых индексы / индекс массива начинается с 1:

Да, найдите время, чтобы переварить тот факт, что у нас все еще есть языки программирования, в которых индексы массивов начинаются с 1.
Хорошо, это сообщение о том, должен ли индекс массива начинаться с 1 или 0?
Неа. Это сообщение о комментарии, который я получил в моем блоге о массивах, где я определил массив следующим образом:
Массив можно определить как непрерывную область памяти, состоящую из элементов одинакового размера, проиндексированных смежными целыми числами.

Я прочитал этот комментарий, неопределенно ответил в уме и упал с планеты на несколько недель.
Некоторые комментарии киборгов заставили меня снова наткнуться на этот комментарий.
Я решил углубиться в то, что я считал правильным, и этот комментарий вдохновил на создание совершенно нового сообщения в блоге.
Да, я знаю, что вам может быть интересно, я не пишу на Python, почему меня это должно волновать?
Потому что это один из способов хранения строк в памяти независимо от того, на каких языках вы пишете.
Как?
Возьмем небольшой пример:
Я хочу сохранить имена всех супер-крутых людей, которые нашли время, чтобы прокомментировать мое сообщение в блоге, используя массив (список в python; просто разные имена)
[‘Maxim’, ‘Naneee’, ‘Barun’, ‘Anand’, ‘Jan’, ‘Sumanth’, ’Amal’, ‘Nikhil’, ‘Sharadhra’, ‘Root’, ‘Deepak’]
Здесь проблема. Во втором пункте в определении массива говорится, что элементы одинакового размера означают, что каждая ячейка массива должна использовать одинаковое количество байтов.
В нашем массиве имен есть строки, состоящие из разной длины. Как нам сохранить эту штуку одинакового размера?
Проблема?
Тупой против мудрого:
Тупой ход: мы можем определить верхний предел, то есть каждую ячейку для хранения максимальной длины строки, но это было бы расточительно.
Мудрый ход: ссылочный массив (массив ссылок на объекты)
Ссылочные массивы:

Нам нужно знать две вещи о ссылочном массиве:
- Здесь вместо последовательного хранения элементов мы сохраняем адреса / ссылки, по которым находится фактическая строка имени (элемент).
- Биты, необходимые для хранения каждого строкового адреса памяти, имеют фиксированный / равный размер (64 бита на адрес).
Решена проблема с переменным размером. Но есть один небольшой недостаток.
Наряду с количеством битов, необходимых для хранения этой строки разной длины, существуют дополнительные накладные расходы, связанные с использованием 64 бит адреса памяти для ссылки на объект.
Но отвечает ли он на вопрос Максима?
Еще нет!
Массив на стероидах - Динамический массив
Другие используемые термины: массив с изменяемым размером / изменяемый (изменяемый) массив.
For JAVA-lovers: Standard Arrays are of fixed size in Java but Array List is not. This is your List ADT( java.util.List, rings a bell?). Not baked directly in language but it is still there. For Javascript/ Ruby: Array size is never fixed, highly resizable. For Non-Pythoners: List is just a different name for an array in Python.
Рак-отшельник во многом похож на динамические массивы. Позвольте мне объяснить сходство между ними.
- Рак-отшельник рождается с панцирем фиксированного размера. Когда мы объявляем наш массив / список, мы часто создаем его определенной длины.
- По мере роста рака-отшельника его панцирь сжимается. Точно так же мы можем добавлять элементы в наш список или массив до определенного предела.
- Чтобы решить проблему с маленьким панцирем, краб-отшельник переходит на более крупный панцирь. Чтобы решить нашу проблему с фиксированной длиной, наши языки используют так называемый динамический массив для размещения новейших элементов.
- Когда краб-отшельник выбирает новый панцирь, он часто ищет более крупный панцирь, чем его нынешний размер, учитывая возможность вырастания в будущем. В нашем динамическом массиве / списке они поддерживают внутренний массив, который часто намного превышает текущую длину.
- По-прежнему существует вероятность, что в новейшем панцире может закончиться место, поэтому рак-отшельник ищет новый панцирь большего размера. Наш обслуживаемый внутренний массив может исчерпать емкость, поэтому они внутренне запрашивают новый, больший массив и копируют старое содержимое из массива в новый.
- Старый панцирь, который не нужен крабу-отшельнику, может быть использован другим крабом, так как он вполне удобен с новым. Точно так же наш старый массив больше не нужен и используется системой.
Список и кортеж Python или список массивов Java основан на этой стратегии.

Я знаю слишком много слов и тоже выгляжу немного устрашающе, но несколько слов я подчеркнула розовым цветом. Мы глубоко (не) устрашающе погрузились в каждый термин.
Таким образом, элементы одинакового размера и необходимость использования нескольких типов данных в массиве без опасения нехватки места исходят от динамических массивов.
Надеюсь, это ответит на ваш вопрос.
Загляните в мой блог, чтобы узнать больше о Программной инженерии и Cs Concepts, или рассмотрите вариант введите здесь свой адрес электронной почты, если вы хотите, чтобы вас добавляли в еженедельный список рассылки. Вы также можете подписаться на я в Twitter, Linkedin и Github