Ответ
List<E> — это упорядоченная коллекция (последовательность) в Java, которая позволяет хранить дублирующиеся элементы и предоставляет доступ по индексу. Это один из фундаментальных интерфейсов Java Collections Framework (JCF).
Основные реализации и их отличия:
| Критерий | ArrayList |
LinkedList |
|---|---|---|
| Внутренняя структура | Динамически расширяемый массив (Object[]). |
Двусвязный список узлов (Node<E>). |
**Доступ по индексу (get(i), set(i)) |
O(1) — очень быстрый. | O(n) — медленный, требует обхода списка. |
| Вставка/удаление в начале/середине | O(n) — медленно, требует сдвига элементов. | O(1) — быстро, если известен узел. |
| Использование памяти | Меньше накладных расходов (только массив). | Больше (хранение ссылок next и prev). |
| Итерация | Быстрая. | Быстрая (но с большими константными издержками). |
Пример использования:
// Создание и базовые операции
List<String> list = new ArrayList<>(); // Чаще всего используется ArrayList
list.add("Apple");
list.add("Banana");
list.add(1, "Orange"); // Вставка по индексу
String fruit = list.get(0); // Доступ по индексу -> "Apple"
list.remove("Banana");
// Итерация
for (String item : list) {
System.out.println(item);
}
// Или с использованием Stream API
list.stream().filter(s -> s.startsWith("A")).forEach(System.out::println);
Когда что выбирать:
ArrayList: В 95% случаев. Оптимален, когда преобладают операции чтения и случайного доступа.LinkedList: Стоит рассмотреть, если частыми операциями являются вставка/удаление в начале списка (как вDeque), или когда важна эффективность операцийaddAll()из другой коллекции.