ArrayList
Класс java.util.ArrayList — это динамический массив, который автоматически меняет свой размер при добавлении и удалении элементов. В отличие от обычного массива (int[], String[]), у которого размер фиксирован при создании, ArrayList может расти и сокращаться по ходу выполнения программы.
ArrayList реализует интерфейс List<E>, где E — тип элементов (Generic). Можно хранить только ссылочные типы — для чисел используются обёртки Integer, Double и т. д.
Внутри ArrayList хранит данные в обычном массиве, но при заполнении создаёт новый массив большего размера и копирует элементы. Доступ по индексу очень быстрый, а вставка в середину — медленнее.
Зачем нужен
хранить коллекцию объектов, размер которой заранее неизвестен;
удобно добавлять и удалять элементы без ручной работы с массивами;
перебирать элементы через
for-each;использовать готовые методы поиска, сортировки и проверки.
Способы создания
import java.util.ArrayList;
import java.util.Arrays;
ArrayList<String> a = new ArrayList<>(); // пустой список
ArrayList<Integer> b = new ArrayList<>(50); // начальная ёмкость 50
ArrayList<String> c = new ArrayList<>(Arrays.asList("a", "b", "c"));
Популярные методы
Метод |
Назначение |
|---|---|
|
добавить элемент в конец |
|
вставить элемент по индексу |
|
получить элемент по индексу |
|
заменить элемент по индексу |
|
удалить по индексу |
|
удалить первое вхождение объекта |
|
количество элементов |
|
пуст ли список |
|
содержит ли элемент |
|
индекс первого вхождения, или -1 |
|
очистить список |
|
преобразование в массив |
Примеры
Пример 1. Создание и добавление элементов
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("яблоко");
fruits.add("банан");
fruits.add("киви");
System.out.println(fruits);
System.out.println("Размер: " + fruits.size());
}
}
Вывод:
[яблоко, банан, киви]
Размер: 3
Пример 2. Доступ по индексу
import java.util.ArrayList;
public class Demo2 {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<>();
nums.add(10);
nums.add(20);
nums.add(30);
System.out.println("Первый: " + nums.get(0));
System.out.println("Последний: " + nums.get(nums.size() - 1));
}
}
Вывод:
Первый: 10
Последний: 30
Пример 3. Замена и удаление
import java.util.ArrayList;
public class Demo3 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("красный");
list.add("синий");
list.add("зелёный");
list.set(1, "жёлтый");
list.remove(0);
System.out.println(list);
}
}
Вывод:
[жёлтый, зелёный]
Пример 4. Перебор через for-each
import java.util.ArrayList;
public class Demo4 {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<>();
nums.add(5);
nums.add(15);
nums.add(25);
int sum = 0;
for (int n : nums) {
sum += n;
}
System.out.println("Сумма: " + sum);
}
}
Вывод:
Сумма: 45
Пример 5. Поиск элемента
import java.util.ArrayList;
public class Demo5 {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("Айдар");
names.add("Беку");
names.add("Дина");
System.out.println(names.contains("Беку"));
System.out.println(names.indexOf("Дина"));
System.out.println(names.indexOf("Канат"));
}
}
Вывод:
true
2
-1
Пример 6. Вставка по индексу
import java.util.ArrayList;
public class Demo6 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("C");
list.add("D");
list.add(1, "B");
System.out.println(list);
}
}
Вывод:
[A, B, C, D]
Пример 7. Очистка списка
import java.util.ArrayList;
public class Demo7 {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
nums.add(3);
System.out.println("До: " + nums + ", isEmpty=" + nums.isEmpty());
nums.clear();
System.out.println("После: " + nums + ", isEmpty=" + nums.isEmpty());
}
}
Вывод:
До: [1, 2, 3], isEmpty=false
После: [], isEmpty=true
Пример 8. Подсчёт чётных чисел
import java.util.ArrayList;
public class Demo8 {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
nums.add(i);
}
int even = 0;
for (int n : nums) {
if (n % 2 == 0) even++;
}
System.out.println("Чётных: " + even);
}
}
Вывод:
Чётных: 5
См. также
Примечание
Лицензия и источники
Техническое описание класса адаптировано из официальной Java API Documentation (https://docs.oracle.com/en/java/javase/), Oracle Free Documentation License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.