linkedlist实现fifo队列的核心是尾进头出:addlast()将元素追加至链表尾部,pollfirst()从链表头部移除并返回最早入队元素,严格保证先进先出;二者配合即构成标准队列操作,且offer()/poll()底层等价于addlast()/pollfirst()。

Java 中的 LinkedList 实现了 Deque 接口,天然支持 FIFO(先进先出)队列行为。用 addLast() 入队、pollFirst() 出队,就是标准的队列操作。
为什么 addLast + pollFirst 是 FIFO?
队列要求“先进先出”,即最早加入的元素最先被取出。addLast() 把新元素加到链表尾部,pollFirst() 从链表头部移除并返回元素——这正好符合 FIFO 的逻辑:头进尾出?不,是尾进头出(入队在尾,出队在头),这才是队列。
-
addLast(e)→ 元素追加到链表末尾(最晚入队的在最后) -
pollFirst()→ 移除并返回链表第一个节点(最早入队的在最前) - 两者配合,保证了插入顺序与移除顺序一致
实际用法示例
无需额外包装,直接使用 LinkedList 实例即可:
LinkedList<string> queue = new LinkedList();
queue.addLast("A"); // 入队
queue.addLast("B");
queue.addLast("C");
System.out.println(queue.pollFirst()); // 输出 "A"
System.out.println(queue.pollFirst()); // 输出 "B"
System.out.println(queue.pollFirst()); // 输出 "C"</string>
注意:pollFirst() 在队列为空时返回 null,不会抛异常;如果希望失败时抛异常,可用 removeFirst()。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
对比其他队列方法
虽然 LinkedList 也支持 offer() 和 poll()(继承自 Queue 接口),但它们底层调用的正是 addLast() 和 pollFirst():
-
queue.offer(e)≡queue.addLast(e) -
queue.poll()≡queue.pollFirst() - 语义更清晰、意图更明确时,推荐直接用
addLast/pollFirst
线程安全提醒
LinkedList 不是线程安全的。多线程环境下作为队列使用,应考虑:
- 用
ConcurrentLinkedQueue(推荐,高性能无锁队列) - 或加外部同步(如
synchronized块) - 避免用
Collections.synchronizedList(new LinkedList()),它只同步单个操作,无法保证复合操作原子性(如先isEmpty()再poll())
不复杂但容易忽略:只要记住“尾进头出”,FIFO 就自然成立。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










