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

Можно ли быстро получить первый элемент в LinkedList?

1.3 Junior🔥 171 комментариев
#Коллекции

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

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

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

Получение первого элемента в LinkedList

Краткий ответ

Да, получить первый элемент в LinkedList можно быстро. Операция имеет временную сложность O(1) благодаря тому, что LinkedList хранит ссылку на головной узел.

Как это работает

LinkedList в Java — это двусвязный список, где каждый элемент связан с предыдущим и следующим. Контейнер всегда имеет ссылку на первый узел (head), поэтому доступ к первому элементу не требует обхода списка:

LinkedList<String> list = new LinkedList<>();
list.add("первый");
list.add("второй");
list.add("третий");

// Получение первого элемента - O(1)
String first = list.getFirst();  // "первый"
String head = list.get(0);       // "первый"

Методы получения первого элемента

В LinkedList есть несколько способов:

  • getFirst() — возвращает первый элемент или выбрасывает NoSuchElementException, если список пуст
  • peekFirst() — возвращает первый элемент или null, если список пуст
  • get(0) — классический способ через индекс, также O(1) для первого элемента
  • peek() — аналог peekFirst()
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(10);
numbers.add(20);

int first = numbers.getFirst();  // 10, исключение если пусто
Integer safe = numbers.peekFirst();  // 10, null если пусто

Важное замечание: последующие элементы

Получение первого элемента быстро, но это НЕ применимо ко всем элементам:

  • Первый элемент: O(1) ✓
  • Случайный элемент (индекс i): O(n) — требует обхода
  • Последний элемент: O(1) — LinkedList хранит и tail ✓
LinkedList<String> list = new LinkedList<>();
for (int i = 0; i < 1000; i++) {
    list.add("элемент " + i);
}

String first = list.get(0);      // O(1) - быстро
String middle = list.get(500);   // O(n) - медленно
String last = list.get(999);     // O(1) - быстро

Сравнение с ArrayList

Для первого элемента LinkedList и ArrayList одинаково быстры — обе O(1). Однако ArrayList быстрее для случайного доступа к любому элементу:

ОперацияLinkedListArrayList
getFirst()O(1)O(1)
get(i)O(n)O(1)
add(0, elem)O(1)O(n)
add(elem)O(1)O(1) amortized

Выводы

✅ Да, первый элемент в LinkedList получается за O(1)

✅ Используй getFirst() или peekFirst() для безопасности

❌ Не используй LinkedList для доступа к случайным элементам по индексу

✅ LinkedList оптимален для операций с началом и концом списка