Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

ArrayList Java: Списки

Наиболее часто используемая коллекция в Java – это список элементов с произвольным доступом. Такой список во многом напоминает массив, но с возможностью динамического добавления элементов.

Списки в Java представлены набором классов, реализующий интерфейс List, в котором описаны общие методы для работы со списками, такими как проверка на существование, добавление, извлечение, замена и другими.

Сами классы, в первую очередь, отличаются друг от друга способом организации (структурой данных) внутри себя. Это происходит из-за того, что не существует универсально эффективного способа создать динамический список. Создатели языка Java решили предложить программистам набор разных реализаций, которые программисты должны выбирать в зависимости от того, какая реализация окажется наиболее эффективной для их ситуации. На практике такое происходит не часто и в большинстве случаев используется ArrayList, который мы и рассмотрим в этом уроке.

import java.util.ArrayList;

var items = new ArrayList<String>();

items.add("Sun");  // Добавляется под индексом 0
items.add("Mars"); // Добавляется под индексом 1

System.out.println(items); // => [Sun, Mars]

// Проверка вхождения
items.contains("Sun"); // true
items.contains("sun"); // false

// Извлечение по индексу
items.get(0); // Sun
items.get(1); // Mars

items.size(); // 2

В этом примере мы создали пустую коллекцию, в которую добавили два элемента с помощью метода add(), распечатали на экран и дальше провели набор типовых действий:

  • contains() - проверяет наличие элемента в коллекции.
  • get() - возвращает элемент по его индексу. Индексация, как и в массивах, начинается с нуля. Обращение к несуществующему индексу приводит к исключению.
  • size() возвращает количество элементов.

Комбинируя эти методы, можно получить последний элемент в коллекции:

// Получение последнего элемента
items.get(items.size() - 1); // Mars

В коде используется новый для нас синтаксис с угловыми скобками ArrayList<String>. Технически это называется дженериком, но проходить мы их будем позже, так как это довольно хитрая концепция. Сейчас же просто запомните, что коллекции – это контейнеры элементов одного типа, поэтому в коллекциях всегда нужно указывать то, что будет внутри них храниться. Вот несколько примеров:

var items = new ArrayList<Integer>();

items.add(100);
items.add(200);

System.out.println(items); // [100, 200]

// Предположим что у нас есть класс User
var users = new ArrayList<User>();
users.add(new User(/* параметры */));

Кроме добавления элементов, их можно изменять и удалять. Метод set() заменяет элемент списка по указанному индексу на новый:

var items = new ArrayList<String>();
items.add("hexlet");
items.add("youtube");

items.set(1, "udemy");
System.out.println(items); // => [hexlet, udemy]

Метод remove() удаляет элемент списка на основе его индекса:

var items = new ArrayList<String>();
items.add("hexlet");
items.add("youtube");

items.remove(0);
System.out.println(items); // => [youtube]

Если у списка есть начальный набор элементов и он достаточно большой, то их можно указать сразу с помощью метода List.of(). Единственное нужно учитывать, что List.of() создает неизменяемый список, то есть его элементы можно использовать, но изменять сам список нельзя. Чтобы добавить возможность его изменения, нужно выполнить его преобразование в ArrayList.

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

// Неизменяемый список
var fixedItems = List.of("Sun", "Mars", /* еще множество элементов */);
var items = new ArrayList<>(fixedItems);

В таком случае Java выводит тип самостоятельно на основе типа первого параметра в List.of(). То же самое происходит и в ArrayList.

Apache Commons Collections

Стандартная библиотека предоставляет множество полезных методов для работы со списками, но даже их недостаточно для всех возникающих ситуаций. Поэтому полезно знать про библиотеку commons-collections4, в которой содержится огромное количество полезных методов на все случаи жизни. Мы будем использовать эту библиотеку как в этом, так и в последующих курсах.

import org.apache.commons.collections4.CollectionUtils;

var items = new ArrayList<String>();

// Добавляет элемент только если он не равен null
CollectionUtils.addIgnoreNull(items, /* значение */);

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 16 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу