peekFirst 和 peekLast 是 ArrayDeque 的非破坏性方法,分别返回队首和队尾元素且不移除,空时返回 null、时间复杂度 O(1);二者语义清晰但需注意“first”指逻辑队首、“last”指逻辑队尾,避免按数组下标误解。

peekFirst 和 peekLast 是 ArrayDeque 提供的两个非破坏性方法,用于分别查看队列头部和尾部的元素,但不移除它们。两者都返回 null(当双端队列为空时),且时间复杂度均为 O(1)。
peekFirst:看一眼队首元素
该方法返回队列最前面的元素(即最先被添加到头部,或最后被 addFirst 插入的元素),但不改变队列结构。适用于需要预判或检查头部状态而不影响后续操作的场景。
- 若队列为空,返回
null;注意空指针风险,建议判空后再使用 - 等价于
element()的安全版本(element()在空时抛NoSuchElementException) - 常用于模拟“只读探针”,比如在循环处理前判断是否还有待处理任务
peekLast:看一眼队尾元素
该方法返回队列最后面的元素(即最后被添加到尾部,或最后被 addLast 插入的元素),同样不移除元素。适合需观察最新入队项、实现滑动窗口或回溯逻辑的场合。
- 空队列时也返回
null,调用前建议用isEmpty()或直接判空 - 与
getLast()行为类似,但后者在空时抛异常,而peekLast更温和 - 例如在维护一个有序双端队列时,用它快速获取最大/最小候选值
对比与使用提醒
二者语义清晰、性能一致,区别仅在于观察方向。实际使用中容易混淆的是“first”和“last”的参照系——ArrayDeque 的 “first” 指逻辑队首(通常对应栈顶或优先处理端),而 “last” 指逻辑队尾(新元素默认加入处)。不要按数组下标直觉理解。
- 避免链式调用后直接解引用,如
deque.peekFirst().toString()可能 NPE - 若需移除并获取,应改用
pollFirst()或pollLast() - 注意:这两个方法不保证线程安全,多线程环境下需外部同步
简单示例片段
(辅助理解,非完整可运行代码)
ArrayDeque<string> dq = new ArrayDeque();<br>dq.add("A"); dq.add("B"); dq.addFirst("X"); // 此时 dq = [X, A, B]<br>System.out.println(dq.peekFirst()); // "X"<br>System.out.println(dq.peekLast()); // "B"</string>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











