队列的基本概念
队列(Queue)是一种先进先出(FIFO, First-In-First-Out)的线性数据结构,元素从队尾(rear)插入,从队头(front)删除。Java中队列通常通过java.util.Queue接口实现,常见实现类包括LinkedList、ArrayDeque和PriorityQueue。
队列的核心操作
1. 插入元素
add(E e):将元素插入队尾,若队列满则抛出异常。offer(E e):将元素插入队尾,队列满时返回false。
2. 删除元素
remove():移除并返回队头元素,队列空时抛出异常。poll():移除并返回队头元素,队列空时返回null。
3. 查看队头元素
element():返回队头元素但不移除,队列空时抛出异常。peek():返回队头元素但不移除,队列空时返回null。
队列的实现类示例
LinkedList(链表实现)
Queue<Integer> queue = new LinkedList<>();
queue.offer(10); // 插入元素
queue.offer(20);
int head = queue.poll(); // 移除并返回队头元素
System.out.println(head); // 输出: 10
ArrayDeque(数组实现)
Queue<String> deque = new ArrayDeque<>();
deque.add("A");
deque.add("B");
String first = deque.peek(); // 查看队头元素
System.out.println(first); // 输出: A
PriorityQueue(优先队列)
优先队列根据元素的优先级(自然顺序或自定义比较器)出队:
Queue<Integer> pq = new PriorityQueue<>();
pq.offer(30);
pq.offer(10);
pq.offer(20);
while (!pq.isEmpty()) {
System.out.println(pq.poll()); // 输出: 10, 20, 30(按升序)
}
线程安全队列
在多线程环境下可使用java.util.concurrent包中的线程安全队列:
BlockingQueue:支持阻塞操作(如LinkedBlockingQueue)。ConcurrentLinkedQueue:非阻塞的高并发队列。
BlockingQueue<Integer> bq = new LinkedBlockingQueue<>(5);
bq.put(1); // 阻塞插入(队列满时等待)
int value = bq.take(); // 阻塞移除(队列空时等待)
应用场景
- 任务调度(如线程池任务队列)。
- 广度优先搜索(BFS)算法。
- 消息队列(如生产者-消费者模型)


。
170万+

被折叠的 条评论
为什么被折叠?



