ArrayList

ArrayList — это структура данных в языке Java, предназначенная для хранения множества значений. Это усовершенствованный массив, в котором можно изменять количество элементов и с легкостью выполнять с ними различные операции.

Такие структуры данных в целом называют динамическими массивами. Обычный массив — это линейный набор элементов с фиксированной длиной, в котором можно хранить данные, как правило, одного типа. Например, может существовать массив чисел, строк и так далее. А динамический массив фиксированной длины не имеет. Его длина динамически изменяется, отсюда и название.

Что такое ArrayList

ArrayList — это в первую очередь упорядоченный набор данных: слово «упорядоченный» означает, что у каждого элемента в наборе есть свое месторасположение. Оно описывается индексом — числом, хранящим положение элемента. Индексы начинаются с нуля. Первый элемент в массиве будет иметь индекс 0, второй — 1, и так далее.

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

Кроме того, в ArrayList можно делать много операций, которые неприменимы к обычному массиву. Например, удалять элементы в простом массиве нельзя — только обнулять или перезаписывать. В остальном структура похожа на обычный массив. И вот почему.

Для чего нужен ArrayList

Задача любого массива, в том числе динамического, — хранить структурированную и упорядоченную информацию, какой-то набор элементов, для которых важно расположение. А применить его можно огромным количеством способов: для хранения и использования данных, реализации программных структур и алгоритмов, математических или физических операций и многого другого.

Еще одна задача ArrayList — упростить работу с массивами благодаря обилию специальных методов, о которых мы поговорим ниже.

Как устроен ArrayList

Внутри структуры данных — массив фиксированного размера, который удаляется и создается заново с новой длиной, когда внутри ArrayList меняется количество объектов. Технически это выглядит так:

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

Чтобы оптимизировать этот процесс, новая длина по умолчанию в полтора раза больше старой — так массив не приходится «переписывать» слишком часто.

Особенности ArrayList

В интерфейсе List описано множество методов, с помощью которых можно легко управлять динамическим массивом: добавлять элементы в конец или в начало, вставлять их в любое место структуры, быстро получать данные, видоизменять весь массив разом, «сливать» несколько коллекций друг с другом и делать многое другое. Для этого не нужно создавать сложные алгоритмы или добавлять вспомогательные структуры — достаточно написать одну строчку кода.

Еще одна особенность ArrayList — технически он хранит только ссылочные типы. Это значит, что фактически внутри него лежат ссылки на сложные элементы. Но внутри такого массива можно хранить и «простые», примитивные элементы вроде числа или строки — для них автоматически создастся специальная «обертка». Так что фактически массив можно использовать для хранения любых типов данных.

Как работать с ArrayList

При создании ArrayList можно сделать пустым с помощью команды

ArrayList<тип> имя переменной = new ArrayList<тип>();

Также можно указать в скобках существующую коллекцию, и тогда динамический массив создастся на ее основе и будет содержать в себе ее элементы.

Еще можно задать массиву изначальную емкость — capacity. Так делают, когда разработчик заранее знает, какое минимальное количество элементов в массиве ему понадобится. Это позволяет уменьшить количество «перезаписей» массива. Для задания емкости нужно указать в скобках целое число — начальное количество элементов.

Затем можно начинать работать с динамическим массивом: добавлять данные командой .add(element), изменять с помощью .set(index, element), применять к элементам различные функции. Их очень много, и с их списком можно ознакомиться в любом туториале или в документации.

Вы можете подробнее узнать про язык Java и про структуры данных в нем из нашего профессионального курса. Станьте востребованным специалистом с нами.

Курсы по теме

(рейтинг: 5, голосов: 2)
Добавить комментарий