List

Базовый Java
≈ 2 мин чтения

Последовательность с индексами

List<E> хранит элементы в определённом порядке и позволяет обращаться к ним по индексу. В отличие от массива, список может менять размер: элементы можно добавлять и удалять по ходу работы программы. Одинаковые значения при этом разрешены.

List<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("SQL");
languages.add("Java");

System.out.println(languages.get(1)); // SQL

Индексация начинается с нуля. Метод get(index) читает элемент, а set(index, value) заменяет значение на существующей позиции.

Добавление и удаление

Метод add(value) добавляет элемент в конец списка. Есть и версия add(index, value), которая вставляет элемент в конкретную позицию. После такой вставки элементы справа сдвигаются по индексам.

List<String> steps = new ArrayList<>();
steps.add("compile");
steps.add("run");
steps.add(1, "test");

steps.remove("test");
System.out.println(steps);

Удалять можно либо по значению, либо по индексу. Эти варианты отличаются смыслом, поэтому особенно внимательно читай вызов, когда список хранит числа.

Готовый список

Если набор значений известен сразу и менять его не нужно, удобно использовать List.of(...).

List<String> roles = List.of("USER", "ADMIN");

System.out.println(roles.getFirst());
System.out.println(roles.getLast());

Такой список нельзя расширять, сокращать или заменять в нём элементы. Методы getFirst() и getLast() позволяют явно читать первый и последний элемент списка.

List описывает поведение, а не способ хранения. Пока достаточно мыслить так: нужен порядок, повторы и доступ по позиции — подходит List. Разницу между его основными реализациями разберём отдельно.