Ответ
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):
- При частых вставках/удалениях в начало или середину списка.