Метод peekFirst() в Java LinkedList
peekFirst()Метод является вспомогательным методом, предоставляемымLinkedListклассом в Java, используемым для получения, но не удаления первого элемента связного списка. Если связный список пуст, он возвращаетnull。
Синтаксис метода
public E peekFirst()
Особенности метода
- Неразрушающая операция: В отличие от
pollFirst()илиremoveFirst()некоторых методов,peekFirst()он не изменяет содержимое связного списка - Быстрый доступ: временная сложность — O(1), потому что LinkedList напрямую хранит ссылку на головной узел
- Безопасный доступ: когда связный список пуст, он возвращает
nullвместо выброса исключения
Сценарии использования
peekFirst()Этот метод особенно подходит для следующих случаев:
- Когда нужно проверить головной элемент очереди, но не хотите его удалять
- Чтобы просмотреть следующий элемент для обработки перед извлечением из очереди
- При реализации функциональности мониторинга или логирования
Примеры кода
Пример базового использования
Пример
public class PeekFirstExample {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
// Просмотреть, но не удалять первый элемент
String firstFruit = fruits.peekFirst();
System.out.println("Первый фрукт: " + firstFruit); // Вывод: Первый фрукт: Apple
System.out.println("LinkedList после peek: " + fruits); // Вывод: [Apple, Banana, Cherry]
}
}
Пример обработки пустого связного списка
Пример
public class EmptyListExample {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
// Безопасно обработать пустой связный список
Integer firstNumber = numbers.peekFirst();
if (firstNumber == null) {
System.out.println("Список пуст");
} else {
System.out.println("Первое число: " + firstNumber);
}
}
}
Сравнение с аналогичными методами
| Название метода | Функция | Поведение при пустом связанном списке | Изменяет ли это связный список |
|---|---|---|---|
peekFirst() |
Просмотр первого элемента | возвращаетnull |
нет |
getFirst() |
Получить первый элемент | throwsNoSuchElementException |
нет |
pollFirst() |
Удалить и вернуть первый элемент | возвращаетnull |
Да |
removeFirst() |
Удалить и вернуть первый элемент | throwsNoSuchElementException |
Да |
Лучшие практики
- Если вы не уверены, пуст ли связный список, предпочитайте использовать
peekFirst()а неgetFirst() - Если вам нужно одновременно просмотреть и удалить элемент, рассмотрите возможность использования
pollFirst()для повышения эффективности - При использовании в конкурентной среде,
peekFirst()требуются дополнительные меры синхронизации
ЧАВО
Q1: peekFirst()иpeek()В чём разница?
peek()иpeekFirst()Функциональность в LinkedList точно такая же,peek()он предоставлен для поддержания согласованности с интерфейсом Queue.
Вопрос 2: ПочемуpeekFirst()возвращаетnullвместо выбрасывания исключения?
Такая конструкция позволяет более гибко обрабатывать ситуации с пустым связным списком, особенно подходит для сценариев операций с очередью и позволяет избежать лишнего кода обработки исключений.
Q3: Использование в многопоточной средеpeekFirst()Это безопасно?
LinkedList не является потокобезопасным. Если вам нужно использовать его в многопоточной среде, рассмотрите возможность использованияCollections.synchronizedList()обёртывания или переключения наConcurrentLinkedDeque。
Java LinkedList