> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-java/kollekciya-linkedlist.md).

# Коллекция LinkedList

`LinkedList` в Java представляет собой реализацию интерфейса `List`, которая представляет собой двусвязный список элементов. Каждый элемент в `LinkedList` содержит ссылки на предыдущий и следующий элементы, что обеспечивает эффективное добавление и удаление элементов в середине списка.

1. **Двусвязный список**: Каждый элемент списка содержит ссылки на предыдущий и следующий элементы. Это позволяет эффективно добавлять и удалять элементы в середине списка.
2. **Отсутствие случайного доступа**: В отличие от массивов или `ArrayList`, доступ к элементам в `LinkedList` осуществляется последовательно от начала или конца списка. Для доступа к элементу по индексу может потребоваться линейное время O(n).
3. **Быстрые операции добавления и удаления**: Добавление или удаление элементов в начале или конце списка выполняется за константное время O(1), что делает `LinkedList` эффективным выбором для стеков, очередей и деков.
4. **Итераторы**: `LinkedList` предоставляет эффективные итераторы для перебора элементов списка. Они позволяют обходить элементы списка вперед и назад.
5. **Менее эффективное использование памяти**: Каждый элемент в `LinkedList` требует дополнительного пространства для хранения ссылок на предыдущий и следующий элементы, поэтому `LinkedList` может потреблять больше памяти по сравнению с другими структурами данных.
6. **Несинхронизированность**: `LinkedList` не является синхронизированным, поэтому он не подходит для использования в многопоточных приложениях без дополнительной синхронизации.

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

```java
import java.util.LinkedList;

public class Main {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();

        // Добавление элементов в конец списка
        list.add("apple");
        list.add("banana");
        list.add("orange");

        // Добавление элемента в начало списка
        list.addFirst("grape");

        // Добавление элемента в середину списка
        list.add(2, "kiwi");

        // Удаление элемента из конца списка
        String lastElement = list.removeLast();
        System.out.println("Удаленный последний элемент: " + lastElement);

        // Получение первого элемента списка
        String firstElement = list.getFirst();
        System.out.println("Первый элемент: " + firstElement);

        // Итерация по элементам списка
        for (String fruit : list) {
            System.out.println(fruit);
        }
    }
}
```
