java中的队列Queue
一、Queue接口定义
Queue是Java集合框架中定义的队列接口,遵循**先进先出(FIFO)**原则。其核心方法分为三类:
- 添加元素
boolean add(E e)
: 队列未满时添加元素,否则抛出异常boolean offer(E e)
: 安全添加元素,队列满时返回false
- 移除元素
E remove()
: 移除并返回队首元素,空队列时抛出异常E poll()
: 安全移除元素,空队列时返回null
- 检查元素
E element()
: 查看队首元素,空队列时抛出异常E peek()
: 安全查看元素,空队列时返回null
二、主要实现类
-
LinkedList
- 基于双向链表实现,支持所有队列操作
- 允许
null
元素,非线程安全 - 示例:
Queue<String> queue = new LinkedList<>(); queue.offer("A"); queue.offer("B"); System.out.println(queue.poll()); // 输出A
-
PriorityQueue
- 基于优先级堆实现,元素按自然顺序或自定义
Comparator
排序 - 不允许
null
元素,非线程安全 - 示例(自定义排序):
Queue<Integer> pq = new PriorityQueue<>((a,b) -> b - a); pq.offer(3); pq.offer(1); System.out.println(pq.poll()); // 输出3
- 基于优先级堆实现,元素按自然顺序或自定义
-
ArrayDeque
- 基于可扩容数组实现的双端队列
- 比LinkedList更高效的内存访问模式
三、应用场景
- 任务调度系统:处理异步任务请求
- 消息队列:实现生产者-消费者模式
- 广度优先搜索:存储待访问节点
- 缓冲池管理:控制资源访问顺序
// 典型生产者-消费者示例
BlockingQueue<Message> queue = new LinkedBlockingQueue<>();
// 生产者线程
queue.put(new Message("data"));
// 消费者线程
Message msg = queue.take();