Что такое ArrayList в Java и каковы его основные характеристики?

«Что такое ArrayList в Java и каковы его основные характеристики?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ArrayList в Java — это реализация интерфейса List, основанная на динамически изменяемом массиве. Это один из самых часто используемых контейнеров, который автоматически увеличивает свою внутреннюю емкость при добавлении элементов.

Основные характеристики:

  • Динамический размер: В отличие от обычного массива (int[]), размер ArrayList не фиксирован и меняется по мере необходимости.
  • Быстрый доступ по индексу: Получение элемента по индексу (get(index)) выполняется за константное время O(1), так как основано на обращении к массиву.
  • Медленные вставка и удаление в середину: При добавлении (add(index, element)) или удалении (remove(index)) элемента не в конце списка происходит сдвиг всех последующих элементов, что имеет сложность O(n).
  • Позволяет хранить null и дубликаты.
  • Не является синхронизированным (потокобезопасным). Для многопоточного доступа нужно использовать Collections.synchronizedList() или CopyOnWriteArrayList.

Пример использования:

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // Создание ArrayList
        ArrayList<String> languages = new ArrayList<>();

        // Добавление элементов
        languages.add("Java");
        languages.add("Kotlin");
        languages.add("Python");

        // Доступ по индексу
        System.out.println(languages.get(0)); // Вывод: Java

        // Удаление элемента (сдвигает последующие)
        languages.remove(1); // Удаляет "Kotlin"

        // Итерация
        for (String lang : languages) {
            System.out.println(lang); // Java, Python
        }
    }
}

Когда использовать ArrayList:

  • Когда требуется частый доступ к элементам по индексу (чтение).
  • Когда операции добавления/удаления происходят преимущественно в конце списка.
  • Когда заранее неизвестно количество элементов.

Когда рассмотреть альтернативу (LinkedList):

  • При частых вставках/удалениях в начало или середину списка.