文章目录
- JAVA集合知识总结(六)
- Queue
- 1. Queue 接口
- 2. Queue 常用方法
- 3. Queue 的实现类介绍
- 3.1 LinkedList
- 3.2 PriorityQueue
- 3.3 阻塞队列(BlockingQueue)
- 3.4 Deque(双端队列)
- 4. 应用场景
- 总结
JAVA集合知识总结(六)
Queue
Queue(队列) 是 位于 java.util
包的,用于实现 先进先出(FIFO)的数据结构,即先插入的元素先被处理。Queue 常用于任务调度、消息队列等场景。
1. Queue 接口
Queue
是一个接口,继承自 Collection
,提供了队列操作的方法。常见实现类有:
- LinkedList:可作为双端队列(Deque)。
- PriorityQueue:基于优先级的队列。
- ArrayDeque:高效的双端队列实现。
- ConcurrentLinkedQueue:线程安全的队列(无锁)。
- BlockingQueue:阻塞队列(用于多线程场景)。
2. Queue 常用方法
方法 | 描述 |
---|---|
add(E e) | 添加元素,失败时抛出异常。 |
offer(E e) | 尝试添加元素,添加失败返回 false 。 |
poll() | 移除并返回队首元素,若队列为空返回 null 。 |
remove() | 移除并返回队首元素,队列为空时抛出异常。 |
peek() | 返回队首元素但不移除,若队列为空返回 null 。 |
element() | 返回队首元素但不移除,若为空抛出异常。 |
3. Queue 的实现类介绍
3.1 LinkedList
- 可用作队列或双端队列。
- 支持添加和删除操作。
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
System.out.println(queue.poll()); // 输出 1
3.2 PriorityQueue
- 基于优先级的队列,元素按自然顺序或自定义比较器排序。
Queue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(1);
System.out.println(pq.poll()); // 输出 1(最小值)
3.3 阻塞队列(BlockingQueue)
BlockingQueue
是线程安全的队列,实现了生产者-消费者模型。常见实现:
- ArrayBlockingQueue:有界队列。
- LinkedBlockingQueue:支持可选的界限。
- PriorityBlockingQueue:带优先级的阻塞队列。
BlockingQueue<Integer> bq = new ArrayBlockingQueue<>(2);
bq.put(1); // 若队列满,则阻塞
System.out.println(bq.take()); // 若为空,则阻塞
3.4 Deque(双端队列)
Deque
继承自 Queue
,支持从两端添加和移除元素,常用实现是 ArrayDeque 和 LinkedList。
Deque<Integer> deque = new ArrayDeque<>();
deque.offerFirst(1); // 从头部添加
deque.offerLast(2); // 从尾部添加
System.out.println(deque.pollFirst()); // 输出 1
4. 应用场景
- 任务调度:根据时间顺序依次处理任务。
- 消息队列:在系统之间传递消息。
- 生产者-消费者模型:通过阻塞队列实现多线程的数据交互。
总结
Queue
是 Java 中实现先进先出结构的接口,并有多种实现类适应不同场景,如基于优先级的 PriorityQueue
、双端队列的 ArrayDeque
及线程安全的 BlockingQueue
。