☕ Учебник по Java: списочный массив ArrayList
В продолжении серии постов о языке программировании Java поговорим об ArrayList. Для чего он нужен и как его использовать.
Знакомство с ArrayList
ArrayList – это реализация динамического использования массива в Java. При использовании массива часто приходится задумываться о требуемом размере, а ArrayList является списком, который увеличивается и уменьшается при необходимости. Этот класс является имплементацией интерфейса (interface) List из Collection Framework, который расположен в пакете java.utils
. В самом классе есть базовые методы добавления и удаления, а также методы, которые возвращают размер списка; очистка по индексу или же по значению и т. д.
Короче
говоря, ArrayList является динамическим массивом, который сам определяет размер. При этом нет необходимости задавать какие-то конфигурации.
Создание объекта
Существуют несколько конструкторов у ArrayList для создания объекта. Каждый из этих видов имеет свои использования и преимущества. Давайте пройдемся по каждому и рассмотрим, где и как используется каждый из данных видов:
1. ArrayList() – простое объявление списка и наиболее часто используемое. Объявляется данный список обычно в конструкторе, который будет использоваться внутри объекта, например, имплементация кэширования и временного хранения в памяти. Является самым простым и удобным объявлением списочного массива в Java.
2. ArrayList(int initialCapacity) – объявление списка с указанием размера преимущественно для случаев, когда будет использоваться большое количество данных и в целях оптимизации следует задавать уже большой размер. Например, используется в случаях, когда список увеличивается с каждым вызовом метода в классе. Размер списка растет с нелинейной скоростью и, если заранее известно, что список будет увеличиваться и будет достигать больших размеров (больше 1e3 элементов), оптимально будет задать изначальный размер и резервировать количество мест заранее.
3. ArrayList(Collection c) – объявления списка с уже имеющимся списком, элементы которого были переданы конструктору.
Добавление элементов
Для того чтобы добавить элемент в список, используется простая функция add
. Для этого метода есть разновидности:
1. add(E e) – добавление элемента в конец списка. Это функция является возвращаемой. Если элемент был добавлен в список, то ответ – true
, иначе – false
.
2. add(int index, E element) – в данном методе добавление элемента происходит в определенную позицию (index), а все последующие элементы двигаются слева направо. Метод эффективен для небольших размеров списка (когда размер списка не более ~100 элементов). В ином случае – если в программе происходит много сдвигов, то лучше использовать LinkedList.
3. addAll(Collection ) – добавление списка элементов в конец добавляемого списка. То есть, при вызове данного метода в конец списка добавляются все элементы в таком же порядке.
4. addAll(int index, Collection ) – это смесь добавления списка и также добавления элемента в определенную позицию. В этом методе в позицию index
производится добавление всех элементов из списка, а все последующие элементы смещаются направо.
Удаление элементов
В ArrayList, существуют методы для удаления элементов. Всего существуют 3 метода для удаления элемента:
1. remove(int index) – удаление осуществляется, используя индекс определенного элемента. То есть, передается порядковый номер элемента и этот элемента удаляется из списка. Не забываем, что индекс начинается с 0.
2. remove(object o) – метод удаляет первый встретившийся элемент, который равняется переданному объекту в параметрах. Если проще, то метод проходится по всему списку и ищет элемент, который равняется удаляемому объекту и при нахождении удаляет только первый встретившийся.
3. removaAll(Collection c) – данный метод удаляет все элементы, находящиеся в передаваемом списке.
Вспомогательные методы
В Arraylist встречаются различные методы, которые являются вспомогательными при различных условиях:
1. size() – возвращает размер списка.
2. sort(Comparator c) – происходит сортировка элементов по заданным параметрам Comparator
. Есть уже значения по умолчанию у Comparator
, которыми можно пользоваться, Comparator.naturalOrder()
, а также Comparator.reverseOrder()
.
3. toArray() – данный метод превращает список в массив. Он возвращает массив объектов (Object[]
), но можно вернуть желаемый тип данных и для этого потребуется в метод toArray(Array a)
передать уже созданный массив.
4. isEmpty() – проверка списка на наличие элементов. Если список пустой, то возвращает true
, в противном случае – false
.
5. indexOf(Object o) – метод возвращает позицию передаваемого элемента, и, если элемент не был найден, возвращает -1.
6. clear() – удаляет все элементы из списка.
7. clone() – метод копирует список. После копирования нужно привести к необходимому классу, то есть type casting
. Когда список клонируется, создается отдельный независимый объект и удаление родительского списка не влияет на элементы нового списка.
Также можно прочитать более подробно про все существующие методы ArrayList в документации Oracle по ссылке.