Глиф Учебники

ArrayList: список в Java

Справочник · Java · 1 минута чтения

ArrayList — список, который растёт сам: в отличие от массива, размер заранее указывать не нужно. Он лежит в пакете java.util.

Java
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("молоко");
        list.add("хлеб");
        list.add("сыр");
        System.out.println(list);
        System.out.println(list.size());
        System.out.println(list.get(1));
        list.set(1, "батон");
        list.remove("молоко");
        System.out.println(list);
        System.out.println(list.contains("сыр"));
        for (String item : list) {
            System.out.println("- " + item);
        }
    }
}
Вывод
[молоко, хлеб, сыр]
3
хлеб
[батон, сыр]
true
- батон
- сыр

List<String> — список строк: тип элементов пишут в угловых скобках. Справа new ArrayList<>() — скобки <> пустые, тип компилятор возьмёт слева. Слева обычно пишут интерфейс List, а не ArrayList: так проще потом заменить вид списка. Список выводится через println сразу в виде [a, b, c], без Arrays.toString.

Основные методы

МетодЧто делает
add(x)добавляет в конец
add(i, x)вставляет на место i, остальные сдвигаются
get(i)элемент с номером i (с нуля)
set(i, x)заменяет элемент с номером i
remove(i)удаляет по номеру
remove(x)удаляет первое вхождение значения
size()число элементов
contains(x)есть ли значение в списке
indexOf(x)номер первого вхождения или −1
isEmpty()пуст ли список
clear()удаляет всё

Список чисел

Для чисел пишут List<Integer>, а не List<int>: в угловых скобках может быть только класс. Числа упаковываются в Integer сами. Осторожно с remove: у List<Integer> вызов remove(1) удаляет элемент с номером 1, а не число 1 — подробно в справке int и Integer.

Удаление в цикле

Удалять элементы прямо в цикле for-each нельзя — программа упадёт с ConcurrentModificationException. Удалить всё, что подходит под условие, удобнее через removeIf:

Java
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> nums = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6));
        nums.removeIf(n -> n % 2 == 0);
        System.out.println(nums);
    }
}
Вывод
[1, 3, 5]

n -> n % 2 == 0 — лямбда, короткая запись правила: «для элемента n — истина, если он чётный».

Подводные камни