← Назад к вопросам

Что такое LinkedList?

1.0 Junior🔥 151 комментариев
#Коллекции и структуры данных

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

LinkedList — структура данных с двусвязным списком

LinkedList — это коллекция в Java/Kotlin, которая реализует интерфейс List и Deque на основе двусвязного списка. В отличие от ArrayList, LinkedList хранит элементы не в виде непрерывного массива, а в виде связанных узлов, где каждый узел содержит ссылку на предыдущий и следующий элемент.

Особенности LinkedList

Структура:

  • Каждый узел содержит: значение, ссылку на предыдущий узел (prev) и ссылку на следующий узел (next)
  • Первый узел называется head (голова), последний — tail (хвост)
  • Начало и конец списка связаны с null

Преимущества:

  • O(1) для вставки/удаления в начало или конец (если есть ссылки на head и tail)
  • O(1) для добавления в любую позицию (если уже позиция известна)
  • Динамический размер — не нужно пересоздавать внутренний массив при расширении
  • Экономит память, если много операций insert/delete

Недостатки:

  • O(n) для доступа к элементу по индексу (нужно пройти от начала)
  • O(n) для поиска элемента
  • Больше памяти на узлы (каждый узел содержит две ссылки)
  • Медленнее ArrayList на случайный доступ

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

// ✅ Хорошо — часто добавляешь в начало/конец
val queue = LinkedList<String>()
queue.addFirst("element1")
queue.addLast("element2")
val first = queue.removeFirst()

// ❌ Плохо — часто обращаешься по индексу
val list = LinkedList<String>()
for (i in 0 until list.size) {
    println(list[i]) // O(n) для каждого обращения!
}

// ✅ Хорошо — используй итератор
for (element in list) {
    println(element) // O(1)
}

LinkedList vs ArrayList

  • ArrayList: быстрый доступ (O(1)), медленная вставка/удаление в середину (O(n))
  • LinkedList: медленный доступ (O(n)), быстрая вставка/удаление (O(1))

В Android разработке LinkedList используется редко, так как большинство задач связано с отображением данных в RecyclerView (доступ по индексу). Предпочитают ArrayList, MutableList или Flow для работы с последовательностями.

Что такое LinkedList? | PrepBro