Метод peek() в Java LinkedList

Java LinkedList Java LinkedList


peek()Метод, в Java, являетсяLinkedListочень полезный метод, предоставляемый классом. Он используется для получения, но не удаления первого элемента (головного элемента) связного списка. Этот метод относится кQueueоперациям интерфейса,LinkedListи LinkedList реализует этот интерфейс.

Синтаксис метода:

public E peek()

Возвращаемое значение:

  • Если связный список не пуст, возвращает первый элемент связного списка
  • Если связный список пуст, возвращает nullnull

Особенности метода

Неразрушающая операция

peek()Метод только "просматривает" первый элемент связного списка, не удаляя его. Это отличается отpoll()илиremove()метода remove(), который удаляет элемент.

Null-безопасность

Когда связный список пуст,peek()peek() возвращает nullnullи не выбрасывает исключение, что делает его болееgetFirst()илиelement()безопасным, чем element(), в некоторых сценариях.

Временная сложность

ПосколькуLinkedListLinkedList реализован на основе двусвязного списка,peek()Временная сложность метода — O(1), потому что ему нужно обратиться только к головному узлу.


Примеры использования

Базовый пример

Пример

import java.util.LinkedList;

public class PeekExample {
    public static void main(String[] args) {
        LinkedList<String> fruits = new LinkedList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
       
        // Используйте peek() для просмотра первого элемента
        String firstFruit = fruits.peek();
        System.out.println("Первый фрукт: " + firstFruit);  // Вывод: Первый фрукт: Apple
        System.out.println("LinkedList после peek(): " + fruits);  // Вывод: [Apple, Banana, Cherry]
    }
}

Пример пустого связного списка

Пример

import java.util.LinkedList;

public class EmptyListPeek {
    public static void main(String[] args) {
        LinkedList<Integer> numbers = new LinkedList<>();
       
        Integer firstNumber = numbers.peek();
        System.out.println("Первое число: " + firstNumber);  // Вывод: Первое число: null
    }
}

Сравнение с другими похожими методами

peek() против getFirst()

Метод Поведение при пустом связном списке Выбрасывает исключение
peek() Возвращает null нет
getFirst() Выбрасывает NoSuchElementException Да

4.2 peek() против element()

Метод Поведение при пустом связном списке Выбрасывает исключение
peek() Возвращает null нет
element() Выбрасывает NoSuchElementException Да

4.3 peek() против poll()

Метод Удаляет ли он элементы Поведение при пустом связном списке
peek() нет Возвращает null
poll() Да Возвращает null

Практические сценарии применения

Обработка очереди сообщений

При обработке очереди сообщений нам часто нужно просмотреть сообщение в начале очереди, не удаляя его:

Пример

LinkedList<Message> messageQueue = new LinkedList<>();
// ... добавить сообщения в очередь

// Проверить, но не удалять первое сообщение
Message nextMessage = messageQueue.peek();
if (nextMessage != null && nextMessage.isHighPriority()) {
    // Обработать сообщения с высоким приоритетом
}

Система планирования задач

В системе планирования задач,peek()peek() можно использовать для проверки следующей задачи для выполнения:

Пример

LinkedList<Task> taskQueue = new LinkedList<>();
// ... добавить задачи в очередь

Task nextTask = taskQueue.peek();
if (nextTask != null && nextTask.isReadyToExecute()) {
    // Выполнить задачу
}

История браузера

Смоделировать просмотр последней посещённой страницы в браузере без удаления её из истории:

Пример

LinkedList<String> browserHistory = new LinkedList<>();
// ... добавить записи о посещениях

String lastVisited = browserHistory.peek();
System.out.println("Последняя посещённая страница: " + lastVisited);

Примечания

  1. Обработка null-значений: Посколькуpeek()peek() может вернуть nullnull, вам следует выполнить проверку на null перед использованием возвращаемого значения, чтобы избежатьNullPointerException。

  2. Параллельная среда:LinkedListLinkedList не является потокобезопасным. Если он используется в многопоточной среде,peek(), требуются дополнительные меры синхронизации.

  3. Вопросы производительности: Хотяpeek()сама операция имеет сложность O(1), если она часто вызывается вместе с другими операциями, возможно, вам потребуется рассмотреть более эффективные структуры данных.

  4. Сравнение с операциями стека: КогдаLinkedListLinkedList используется как стек,peek()peek() просматривает первый элемент (вершину стека), что то же самое, что иStackкласса Stackpeek()Поведение метода peek().

Java LinkedList Java LinkedList

Другие расширения