ArrayList

3 года назад

Nikolai Gagarinov

Ответы

0

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

2 года назад

Елена Редькина

0

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

В отличие от обычного массива, длина которого фиксируется при создании, ArrayList автоматически увеличивается или уменьшается в зависимости от количества добавленных или удаленных элементов. Структура сохраняет порядок вставки и обеспечивает доступ к элементам по индексу.

T3DL2FuMiAL6 image

Назначение ArrayList

Основная задача ArrayList — хранение набора данных, где:

  • важен порядок элементов;

  • требуется доступ по числовому индексу;

  • количество элементов заранее неизвестно;

  • необходимы операции добавления, изменения и удаления.

Структура применяется для:

  • хранения списков объектов;

  • передачи групп данных между методами;

  • реализации алгоритмов сортировки и поиска;

  • накопления результатов вычислений;

  • построения более сложных структур данных.

ArrayList удобен в ситуациях, когда требуется частое чтение по индексу и умеренное количество операций вставки и удаления.

Упорядоченность и индексация

ArrayList является упорядоченной коллекцией. Каждый элемент имеет позицию, которая определяется индексом. Индексация начинается с нуля:

  • первый элемент имеет индекс 0;

  • второй — 1;

  • третий — 2;

  • и так далее.

Доступ к элементу осуществляется напрямую по его индексу. Это обеспечивает высокую скорость чтения, поскольку используется обращение к внутреннему массиву.

Пример получения элемента:

ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
String value = list.get(1);

В переменной value будет храниться строка "B".

Внутреннее устройство

В основе ArrayList лежит обычный массив фиксированного размера. Однако пользователь работает не напрямую с этим массивом, а через методы класса.

Механизм изменения размера выглядит следующим образом:

  1. При добавлении нового элемента проверяется, хватает ли текущего объема.

  2. Если места недостаточно, создается новый массив большего размера.

  3. Элементы старого массива копируются в новый.

  4. Старый массив удаляется.

  5. Новый массив становится рабочим.

По умолчанию увеличение происходит с запасом. Новый размер больше предыдущего примерно в полтора раза. Это снижает частоту пересоздания массива и повышает производительность при последовательном добавлении элементов.

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

Работа с типами данных

ArrayList хранит только ссылочные типы. Это означает, что внутри структуры размещаются ссылки на объекты.

Примеры ссылочных типов:

  • классы, созданные разработчиком;

  • строки;

  • оболочки примитивных типов.

Примитивные типы, такие как int или double, напрямую храниться не могут. Для них используются классы-оболочки:

  • int → Integer;

  • double → Double;

  • boolean → Boolean.

Пример:

ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);

Значения 10 и 20 автоматически преобразуются в объекты класса Integer.

Создание ArrayList

Создание пустого списка выполняется следующим образом:

ArrayList<String> list = new ArrayList<>();

Можно указать начальную емкость:

ArrayList<String> list = new ArrayList<>(100);

Число 100 означает предполагаемое минимальное количество элементов. Это уменьшает число пересозданий внутреннего массива при добавлении данных.

Также возможно создание списка на основе другой коллекции:

ArrayList<String> newList = new ArrayList<>(existingCollection);

В этом случае элементы исходной коллекции копируются в новый список.

Основные операции

ArrayList предоставляет набор методов для управления данными. Наиболее используемые операции:

  • add(E element) — добавление в конец;
  • add(int index, E element) — вставка по индексу;
  • get(int index) — получение элемента;
  • set(int index, E element) — замена элемента;
  • remove(int index) — удаление по индексу;
  • remove(Object obj) — удаление по значению;
  • size() — получение количества элементов;
  • clear() — очистка списка.

Пример добавления и изменения:

ArrayList<String> list = new ArrayList<>();
list.add("Первый");
list.add("Второй");
list.set(1, "Измененный");

После выполнения второй элемент будет заменен.

Вставка и удаление

При вставке элемента в середину списка все элементы справа сдвигаются на одну позицию. Аналогично, при удалении происходит сдвиг влево.

Алгоритм вставки:

  1. Проверяется наличие свободного места.

  2. При необходимости выполняется расширение.

  3. Элементы сдвигаются вправо.

  4. Новый элемент вставляется по указанному индексу.

Алгоритм удаления:

  1. Элемент по индексу удаляется.

  2. Последующие элементы сдвигаются влево.

  3. Размер списка уменьшается на единицу.

Из-за сдвигов вставка и удаление в середине выполняются медленнее, чем добавление в конец.

Доступ к элементам

Получение элемента по индексу выполняется за постоянное время. Это связано с тем, что внутри используется массив, а обращение к массиву по индексу происходит напрямую.

Пример обхода списка:

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

Также можно использовать цикл перебора:

for (String value : list) {
    System.out.println(value);
}

В обоих случаях элементы выводятся в порядке их хранения.

Объединение списков

ArrayList поддерживает добавление элементов другой коллекции:

list.addAll(otherList);

Все элементы второй коллекции будут добавлены в конец текущего списка с сохранением порядка.

Вставка коллекции в определенное место:

list.addAll(2, otherList);

Элементы будут вставлены начиная с указанного индекса.

Изменение размера

Размер списка определяется количеством фактически добавленных элементов и возвращается методом size().

Емкость внутреннего массива может быть больше текущего количества элементов. Для сокращения внутреннего объема используется метод:

list.trimToSize();

Он уменьшает внутренний массив до фактического размера списка.

Ограничения и особенности

ArrayList обладает следующими характеристиками:

  • быстрый доступ по индексу;

  • эффективное добавление в конец;

  • медленная вставка и удаление в середине;

  • хранение только ссылочных типов;

  • автоматическое управление размером.

Сравнение с обычным массивом

Обычный массив:

  • имеет фиксированную длину;

  • не поддерживает методы вставки и удаления;

  • хранит примитивные типы напрямую;

  • не изменяет размер автоматически.

ArrayList:

  • изменяет размер динамически;

  • предоставляет набор методов управления;

  • хранит ссылки на объекты;

  • упрощает работу с наборами данных.

С точки зрения внутренней реализации ArrayList остается массивом, но дополненным логикой управления размером и операциями над элементами.

Типичные сценарии использования

ArrayList применяется в случаях, когда:

  • требуется динамический список значений;

  • важна последовательность добавления;

  • преобладают операции чтения;

  • нет строгих требований к фиксированному объему памяти.

Пример хранения объектов:

class User {
    String name;
    int age;
}

ArrayList<User> users = new ArrayList<>();
users.add(new User());

Список позволяет накапливать объекты и обращаться к ним по индексу.

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

14 дней назад

Nikolai Gagarinov

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845