Queue接口
以下是对 Queue
接口的详细解析,结合代码注释和使用场景说明:
1. Queue 接口概述
Queue
是 Java 集合框架中的队列接口,继承自 Collection
,定义了一组队列特有的操作。队列通常按 FIFO(先进先出) 规则排序,但也支持其他排序方式(如优先级队列、LIFO 栈)。
核心特点:
- 双模式方法:每个操作有两种形式,一种抛出异常,另一种返回特殊值(如
null
/false
)。 - 常用场景:任务调度、消息队列、生产者-消费者模型等。
2. 核心方法对比
插入元素 |
|
|
容量不足时抛异常,
返回
|
移除元素 |
|
|
队列为空时抛异常,
返回
|
查看元素 |
|
|
队列为空时抛异常,
返回
|
3. 方法详解与示例
3.1 插入元素
- boolean add(E e)尝试插入元素,容量不足时抛 IllegalStateException。
- boolean offer(E e)插入成功返回 true,失败返回 false(如容量限制时)。
3.2 移除元素
- E remove()移除并返回队首元素,队列为空时抛 NoSuchElementException。
- E poll()移除并返回队首元素,队列为空时返回 null。
3.3 查看元素
- E element()返回队首元素,队列为空时抛 NoSuchElementException。
- E peek()返回队首元素,队列为空时返回 null。
4. 常用实现类
| 基于双向链表,支持 FIFO,允许
,线程不安全 |
| 按自然顺序或自定义比较器排序,不允许
,线程不安全 |
| 基于数组,高效插入/删除,支持双端队列(
),不允许
|
| 线程安全,基于链表,适用于高并发场景 |
5. 与其他接口的区别
| 有序集合,支持索引操作(如
),允许重复元素 |
| 无序集合,元素唯一,不允许重复 |
| 按特定规则排序(如 FIFO),支持队列操作(如
、
) |
6. 典型应用场景
- 生产者-消费者模型:使用
BlockingQueue
实现线程间安全通信。 - 任务调度:按优先级处理任务(
PriorityQueue
)。 - 缓存淘汰:使用 FIFO 策略管理缓存(
LinkedList
或ArrayDeque
)。
7. 注意事项
null
元素:大多数Queue
实现不允许插入null
(如PriorityQueue
),但LinkedList
允许。- 线程安全:默认实现(如
LinkedList
)是非线程安全的,需使用ConcurrentLinkedQueue
或BlockingQueue
。 - 容量限制:固定容量队列需通过
offer()
判断插入是否成功。
完整示例
import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { Queue<String> queue = new LinkedList<>(); // 插入元素 queue.offer("Alice"); queue.offer("Bob"); queue.offer("Charlie"); // 查看队首元素 System.out.println("Head: " + queue.peek()); // Head: Alice // 遍历队列(需注意顺序) while (!queue.isEmpty()) { System.out.println("Polled: " + queue.poll()); } // 输出: // Polled: Alice // Polled: Bob // Polled: Charlie } }
总结
Queue
接口为队列操作提供了统一规范,通过不同实现类可满足多种场景需求。在实际开发中,需根据线程安全、容量限制和排序策略选择合适的实现类。
Java集合框架 文章被收录于专栏
Java集合框架是Java提供的一组用于存储和操作数据的类和接口,它位于java.util包中,为开发者提供了强大且灵活的数据存储和处理能力。以下将从整体架构、主要接口、常用实现类、使用场景以及示例代码等方面详细介绍Java集合框架。