最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java中 ArrayDeque 的 pollFirst 与 pollLast 方法处理队头队尾元素
时间:2026-07-21 09:16:48 编辑:袖梨 来源:一聚教程网
pollFirst和pollLast是ArrayDeque中O(1)移除并返回队头或队尾元素的方法,空队列时均返回null;前者实现FIFO出队,后者实现LIFO出栈,均不抛异常、不触发扩容、非线程安全。
pollFirst 和 pollLast 是 ArrayDeque 中用于移除并返回队列端点元素的两个核心方法,分别操作队头(前端)和队尾(后端),它们都返回被移除的元素,若队列为空则返回 null。
pollFirst:从队头移除元素
该方法模拟“队列”的先进先出(FIFO)行为,取出并删除当前最靠前的元素(即下标最小的有效元素)。内部通过调整头指针(head)实现,时间复杂度为 O(1)。注意:它不检查元素是否为 null,仅依据队列结构判断是否存在有效元素。
- 空队列调用返回
null,不会抛异常 - 适合用作双端队列的“出队”操作(如 BFS 中按层处理时从头取节点)
- 与
removeFirst()不同,后者为空时抛NoSuchElementException
pollLast:从队尾移除元素
该方法模拟“栈”的后进先出(LIFO)行为,取出并删除当前最靠后的元素(即下标最大的有效元素)。内部通过调整尾指针(tail)完成,同样为 O(1) 操作。
- 常用于需要回溯或逆序处理的场景,比如解析表达式、撤销操作缓存
- 与
removeLast()的区别同样在于空队列时返回null还是抛异常 - 若将
ArrayDeque当作栈使用,pollLast()等价于栈的pop()
使用时需注意的细节
这两个方法均不涉及数组扩容或缩容,只改变逻辑边界;实际底层数组空间可能仍保留已移除元素的引用,但后续插入会自然覆盖。多线程环境下非线程安全,需外部同步。
立即学习“Java免费学习笔记(深入)”;
- 不要依赖返回值是否为
null来判断元素本身是否为null——因为ArrayDeque允许存入null,但pollFirst/pollLast返回null只表示队列为空 - 若需区分“空队列”和“队列含 null 元素”,应提前用
isEmpty()判断 - 连续多次调用不会导致性能衰减,因底层是循环数组,头尾指针独立移动
简单对比示例
假设初始化 ArrayDeque<string> dq = new ArrayDeque(Arrays.asList("a", "b", "c"))</string>:
-
dq.pollFirst()→ 返回"a",队列变为["b", "c"] -
dq.pollLast()→ 返回"c",队列变为["b"] - 再调用
pollFirst()→ 返回"b",队列变为空 - 此时再调用任一方法都返回
null
相关文章
- 劲乐幻想预约测试时间介绍 劲乐幻想测试时间何时公布 07-28
- Agent Skill 安装前怎么查风险?SkillSpector 使用方法解析 07-28
- 劲乐幻想模式有哪些 劲乐幻想游戏玩法一览介绍 07-28
- 劲乐幻想幻乐新人室怎么玩 幻乐新人室玩法一览 07-28
- 劲乐幻想观棋何人 劲乐幻想观棋角色信息介绍 07-28
- 劲乐幻想尹谷川是谁 劲乐幻想尹谷川角色信息全览 07-28