1. Класс ArrayList
Сегодня мы изучим класс ArrayList
. Это первый класс из так называемых коллекций. Коллекции в Java — настолько обширная и полезная вещь, что ей посвящен целый квест на JavaRush.
Чтобы полностью понять, как устроены коллекции и все нюансы их работы, нужно сначала изучить ООП, интерфейсы, наследование, азы многопоточности и многое другое.
Поэтому сегодня мы просто познакомимся с самой простой коллекцией. Зато на достаточно глубоком уровне, чтобы вы понимали, как ей пользоваться и как она работает. Итак, встречайте: коллекция ArrayList
.
Предыстория
Начну с небольшой предыстории. Программистам очень не нравилось одно свойство массива — его размер нельзя изменять. Что делать, если нужно сохранить в массиве ещё три элемента, а свободное место только одно?
Единственным решением проблемы нехватки места в массиве было создание массива очень большого размера, чтобы все элементы туда точно поместились. Но это часто приводило к нерациональному расходу памяти. Если обычно в массиве хранилось два-три элемента, но был хотя бы мизерный шанс, что там их будет 100, приходилось создавать массив на 100 элементов.
И что же придумали программисты? Они написали класс ArrayList
(массив-список), который выполнял ту же работу, что и Array
(массив), но мог изменять свой размер.
Класс ArrayList
Само название ArrayList
происходит из двух слов: Array + List. Array
— это массив, а List
— список.
Внутри каждого объекта типа ArrayList
хранится обычный массив элементов. Когда вы считываете элементы из ArrayList
, он считывает их со своего внутреннего массива. Когда записываете — записывает их во внутренний массив.
У класса ArrayList отсутствуют все недостатки, которые есть у массивов. Он умеет:
- Хранить элементы определенного типа
- Динамически менять размер списка
- Добавлять элементы в конец списка
- Вставлять элементы в начало и середину списка
- Удалять элементы из любого места списка
Подробнее — ниже:
2. Создание объекта ArrayList
Чтобы создать объект класса ArrayList
, нужно написать код типа:
ArrayList<Тип> имя = new ArrayList<Тип>();
Где ArrayList
— это тип/класс коллекции, Тип
— это тип элементов, которые хранит коллекция ArrayList
, а имя
— это имя переменной типа ArrayList<Тип>
.
Тип у переменной имя
составной — состоит аж из двух типов: сначала указывается тип коллекции, а в треугольных скобках указывается тип элементов, которые эта коллекция хранит.
Примеры:
Код | Описание |
---|---|
|
Список целых чисел |
|
Список строк |
|
Список вещественных чисел |
Коллекции, в отличие от массивов, не могут хранить примитивные типы: только типы-классы. Поэтому если вам нужна коллекция с типом int
, используйте вместо него тип-обертку — Integer
.
3. Операции с ArrayList
Изначально длина только что созданного списка равна нулю: он содержит 0 элементов. Если в список добавить один элемент, его длина увеличится на 1. Если удалить добавленный элемент, опять уменьшится до нуля.
Более подробно можно узнать о методах класса ArrayList
из таблицы:
Методы | Описание |
---|---|
|
Добавляет в список переданный элемент |
|
Добавляет элемент в определенное место списка. |
|
Возвращает элемент, который находится под номером index |
|
Меняет значение элемента с номером index на value |
|
Удаляет элемент под номером index . Возвращает удаленный элемент. |
|
Удаляет элемент: нужно передать сам элемент в список. Если таких элементов несколько, будет удален первый из них. |
|
Очищает список — удаляет все элементы из списка. |
|
Проверяет, содержится ли в списке элемент value . |
|
Проверяет, пустой список или нет. Равна ли длина списка нулю. |
|
Возвращает размер списка — количество элементов списка. |
|
Возвращает массив, содержащий те же элементы, что и список. Массив нужно передать в метод. |
Данные методы позволяют делать со списком практически все возможные операции: менять элементы местами, добавлять элементы, удалять элементы. Можно даже очистить список одной командой или преобразовать список в массив.
4. Сравнение ArrayList
и Array
Думаю, без сравнения ArrayList
и массива нам не обойтись.
Фактически у массива есть всего 4 действия:
- Создание массива
- Получение элемента по номеру
- Установка элемента по номеру
- Получение длины массива
Вот аналоги этих операций в массиве и в ArrayList
:
Массив | ArrayList |
---|---|
|
|
|
|
|
|
|
|
Давайте сравним работу ArrayList
с работой массива. Для примера решим такую задачу «ввести 10 строк с клавиатуры и вывести их на экран в обратном порядке»
Используем Array (массив) | Используем ArrayList |
---|---|
|
|
В принципе можно провести четкую аналогию. Причем в массиве все даже как-то короче и понятнее что-ли. Но и в ArrayList
не сильно сложно: получить элемент — метод get()
, изменить элемент — метод set()
, получить длину списка — метод size()
.
Так зачем программисты используют класс ArrayList
?
Конечно же, все дело в остальных методах, которых у массива нет и не будет:
- Добавление элемента в список
- Вставка элемента в середину списка
- Поиск элемента в списке
- Удаление элемента из списка
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ