Структура данных массива организует элементы последовательно, один за другим в оперативной памяти, поэтому, если вы хотите перебирать данные, структура данных массива — лучший выбор, особенно если вы знаете их индексы.
Массивы уже встроены почти во все языки программирования, например, в JavaScript массив строк инициализируется следующим образом;
const myArray = ['a','b','c'];
Чтобы получить доступ к элементу массива с индексом 1 myArray[1], эта операция будет иметь постоянную временную сложность O(1), поскольку компьютер точно знает, где в памяти расположены данные. Удаление или добавление элемента в конец массива также будет иметь постоянную временную сложность.
Удаление или добавление элемента в начало массива, вставка элемента в массив или удаление элемента из массива будут иметь линейную временную сложность O(n), поскольку остальные элементы массива должны изменить свои индексы.
Таким образом, массивы хороши для доступа к элементам и добавления элементов в конце.
Есть 2 типа массивов;
Статические массивы:
Они имеют фиксированный размер, это означает, что вам нужно указать количество элементов, которые будет содержать массив. Чтобы добавить больше элементов в тот же массив, вам нужно скопировать весь массив в другой адрес памяти. Статические массивы используются в C, C++ и других низкоуровневых языках.
Динамические массивы:
Они автоматически распределяют память.
В JavaScript массивы — это объекты, что делает их ссылочными типами, потому что они не являются примитивными типами, они создаются программистом, и есть 3 вещи, которые важны, когда речь идет об объектах.
1. Тип ссылки
Всякий раз, когда вы создаете новый объект/массив, вы создаете новую ссылку, поэтому при попытке запустить [] === []или {} === {} или {a:1} === {a:1} в консоли вы получите false, потому что это две разные ссылки.
Если только один не указывает на ссылку другого, т.е.
Let arr1 = [1,2]; Let arr2 = arr1; Arr1 === arr2 //true because they have the same reference
2. Контекст
Это отличается от области, когда вы создаете функцию, вы создаете новую область, но контекст означает, в какой объектной среде мы находимся.
Это делается с помощью ключевого слова this в JavaScript, т. е. если вы запустите console.log this в консоли браузера, вы получите объект окна, потому что это объект, в котором работает браузер.
3. Создание экземпляра
Это когда вы создаете объект и повторно используете его для создания (создания) других объектов точно так же, как это делается в объектно-ориентированном программировании, т.е. если вы хотите создать объекты всех млекопитающих, это становится утомительным, потому что их много, но вместо этого вы можете создать класс, описывающий млекопитающих, поскольку у них есть некоторые общие черты после создания из него новых экземпляров/объектов.
Class Mammal{ Constructor(name,age){ this.name = name; this.age = age; } Introduce(){ Console.log(“hello ${this.name}”); } }//you notice that we use the this keyword to reference to properties in the context of the object created from the class
Если вы хотите создавать объекты, но с большей функциональностью, вы можете расширить классы
Class Dog extends Mammal{ Constructor(name, age){ Super(name, age);//runs the constructor of the parent } Bark(){ Console.log(“boo”); }}
Теперь мы можем создавать новые объекты
Const mammal = new Mammal(99“doe”,12);//mammal is an object Mammal{}