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"));

Популярные методы

Метод

Назначение

add(E e)

добавить элемент в конец

add(int i, E e)

вставить элемент по индексу

get(int i)

получить элемент по индексу

set(int i, E e)

заменить элемент по индексу

remove(int i)

удалить по индексу

remove(Object o)

удалить первое вхождение объекта

size()

количество элементов

isEmpty()

пуст ли список

contains(Object o)

содержит ли элемент

indexOf(Object o)

индекс первого вхождения, или -1

clear()

очистить список

toArray()

преобразование в массив

Примеры

Пример 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.