статические и динамические массивы

Что это?

В программировании есть понятие статических и динамических массивов. Мы объявляем статический массив в Java как заданный размер. Более подробно о статических массивах я расскажу в своем Посте о массивах Java. Динамический массив означает, что мы можем инициализировать массив без заданного размера. Динамический массив также будет расти по мере добавления новых элементов в массив. В Java есть несколько различных типов динамических массивов, но в этой статье мы рассмотрим ArrayList. Я расскажу, как инициализировать ArrayList, некоторые полезные методы, а также плюсы и минусы их использования.

Фото Келли Сиккема на Unsplash

Как инициализировать

В Java все динамические массивы реализуют интерфейс под названием List. При использовании динамических массивов рекомендуется вводить переменную как List. Это предотвращает привязку к конкретной реализации списка. Если вам интересно, вы можете прочитать Документацию Oracle о том, какие реализации List доступны. Списку требуется тип, независимо от того, какой тип является единственным типом, который мы можем хранить в списке. Теперь мы знаем достаточно, чтобы объявить первую половину нашего ArrayList.

List<String> nameOfList;

Чтобы инициализировать наш список массивов, нам нужно вызвать ключевое слово new в классе ArrayList. При создании ArrayList вы можете передать число, чтобы инициализировать ArrayList размером. В этом нет необходимости, так как ArrayList является динамическим, и вы почти никогда не увидите экземпляр ArrayList с размером.

List<String> nameOfList = new ArrayList<>();

Полезные методы

В классе ArrayList слишком много методов, которые нужно охватить. Я бы сказал, что знание того, как добавлять, получать, удалять и находить размер, необходимо для использования ArrayLists. Большинство других методов являются ситуативными, и вам будет достаточно быстрого поиска в Google. Все методы, доступные в Java ArrayList, находятся здесь.

Фото: Karsten Winegeart на Unsplash

Плюсы и минусы

Самым большим преимуществом использования ArrayList является постоянно увеличивающийся размер. Другим большим преимуществом являются предоставляемые методы API: получение, добавление, размер и т. д. Однако это действует как палка о двух концах. ArrayLists будут потреблять больше памяти и, как правило, будут более дорогими в обслуживании по сравнению с простым массивом. Еще одним потенциальным недостатком ArrayList является то, что они хранят только объекты. При попытке сохранить int в ArrayList вам сначала нужно преобразовать его в Integer.

Моя причина состоит в том, чтобы всегда убедиться, что вы не можете использовать массив, прежде чем создавать ArrayList.

Продвинутые знания

Это продвинутая тема! Я включаю его, потому что он дает интересный взгляд на то, что происходит за кулисами ArrayList. Если вы можете следить за этой темой, вы хорошо разбираетесь в ArrayLists.

Что происходит, когда размер нашего списка ArrayList заканчивается? Мы знаем сверху, что он расширится, чтобы вместить больше предметов, но как?

Когда ArrayList исчерпает память, он увеличит свой размер в зависимости от того, что указано в деталях под капотом. Это может быть удвоение размера, утроение или что-то еще, знайте, что ArrayList будет расширяться.

Затем ArrayList скопирует данные старого ArrayList в новый ArrayList. Это может звучать очень плохо, копирование — дорогостоящая операция, и если ArrayList делает это каждый раз, это должно означать, что это не очень эффективно, верно? В небольших масштабах, да. Добавление в ArrayList может быть O (n). Каждый отдельный элемент в ArrayList должен повторяться и копироваться в новый, расширенный ArrayList. Однако по мере роста нашего ArrayList его придется расширять меньше раз, и это копирование будет происходить реже. Если мы делаем это снова и снова, мы получаем большое O(1), также называемое постоянным временем.

Это концепция амортизированного времени. Если мы делаем что-то достаточно, нас не волнует крайний случай дорогостоящей операции. Вот почему вы увидите, что производительность добавления в ArrayList отображается как O(1), а не O(n).

Спасибо за чтение! Поскольку вы зашли так далеко, я думаю, вам понравится documentobject.com. Ознакомьтесь с другими статьями, подобными этой.