Что делает метод peek()?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Метод peek() в Java используется для выборки элементов из различных коллекций, не удаляя их. Его поведение зависит от интерфейса или класса, в котором он определен.
В контексте Java SE, peek() обычно применяется:
-
В интерфейсе
Deque(и его реализациях, таких какArrayDeque,LinkedList): Возвращает верхний (первый) элемент дека, но не удаляет его. Если дек пуст, возвращаетnull.// Пример использования peek() для Deque import java.util.Deque; import java.util.ArrayDeque; public class DequePeekExample { public static void main(String[] args) { Deque<String> deque = new ArrayDeque<>(); deque.offerLast("Element 1"); deque.offerLast("Element 2"); String firstElement = deque.peek(); // Возвращает "Element 1", не удаляя его System.out.println("First element: " + firstElement); // Output: First element: Element 1 System.out.println("Deque after peek: " + deque); // Output: Deque after peek: [Element 1, Element 2] } } -
В интерфейсе
Queue(и его реализациях, таких какLinkedList,PriorityQueue): Возвращает головной (первый) элемент очереди, но не удаляет его. Если очередь пуста, возвращаетnull.// Пример использования peek() для Queue import java.util.Queue; import java.util.LinkedList; public class QueuePeekExample { public static void main(String[] args) { Queue<Integer> queue = new LinkedList<>(); queue.offer(10); queue.offer(20); Integer headElement = queue.peek(); // Возвращает 10, не удаляя его System.out.println("Head element: " + headElement); // Output: Head element: 10 System.out.println("Queue after peek: " + queue); // Output: Queue after peek: [10, 20] } } -
В потоках (Streams) с промежуточной операцией
peek(): Выполняет действие над каждым элементом потока, не влияя на его содержимое. Используется в основном для отладки или логирования, позволяя "подсмотреть" элементы по мере их прохождения через конвейер.// Пример использования peek() в Streams import java.util.stream.Stream; public class StreamPeekExample { public static void main(String[] args) { Stream.of("a", "b", "c") .peek(s -> System.out.println("Processing: " + s)) // Выполняет действие для каждого элемента .map(String::toUpperCase) .forEach(System.out::println); } }
Основные характеристики peek():
- Не модифицирует коллекцию/поток: В отличие от методов вроде
poll()илиremove(),peek()только просматривает элемент. - Возвращает
null: Для коллекций, если они пусты,peek()возвращаетnull(в отличие отelement(), который бросает исключениеNoSuchElementException). - Ленивый в Streams: В потоках операция
peek()является промежуточной и выполняется только тогда, когда потоковый конвейер завершается терминальной операцией.
Таким образом, peek() предоставляет безопасный способ проверить следующий доступный элемент без его извлечения.