java 队列如何使用
Java 队列的基本使用
Java 提供了多种队列实现,主要通过 Queue 接口及其子接口(如 Deque、BlockingQueue)和实现类(如 LinkedList、ArrayDeque、PriorityQueue)来完成队列操作。
队列的创建
使用 LinkedList 或 ArrayDeque 实现普通队列:
Queue<String> queue = new LinkedList<>();
Queue<Integer> priorityQueue = new PriorityQueue<>();
添加元素
使用 add() 或 offer() 方法添加元素到队尾:
queue.add("A"); // 可能抛出异常
queue.offer("B"); // 返回布尔值表示是否成功
移除元素
使用 remove() 或 poll() 方法移除队首元素:
String head1 = queue.remove(); // 队列为空时抛出异常
String head2 = queue.poll(); // 队列为空时返回 null
查看队首元素
使用 element() 或 peek() 方法查看但不移除队首元素:
String peek1 = queue.element(); // 队列为空时抛出异常
String peek2 = queue.peek(); // 队列为空时返回 null
双端队列(Deque)的使用
Deque 支持从队列两端操作元素。
创建双端队列
Deque<String> deque = new ArrayDeque<>();
添加元素
从队首或队尾添加元素:
deque.addFirst("A"); // 等效于 push()
deque.addLast("B"); // 等效于 add()
deque.offerFirst("C");
deque.offerLast("D");
移除元素
从队首或队尾移除元素:
String first = deque.removeFirst(); // 等效于 pop()
String last = deque.removeLast();
String firstPoll = deque.pollFirst();
String lastPoll = deque.pollLast();
查看元素
查看队首或队尾元素:
String firstElement = deque.getFirst();
String lastElement = deque.getLast();
String firstPeek = deque.peekFirst();
String lastPeek = deque.peekLast();
优先队列(PriorityQueue)的使用
优先队列根据元素的自然顺序或自定义比较器排序。
创建优先队列
Queue<Integer> priorityQueue = new PriorityQueue<>();
// 自定义排序
Queue<Integer> customPriorityQueue = new PriorityQueue<>(Comparator.reverseOrder());
添加和移除元素
操作与普通队列一致,但出队顺序按优先级:
priorityQueue.offer(5);
priorityQueue.offer(1);
priorityQueue.offer(3);
System.out.println(priorityQueue.poll()); // 输出 1
阻塞队列(BlockingQueue)的使用
BlockingQueue 常用于多线程场景,如 ArrayBlockingQueue 或 LinkedBlockingQueue。
创建阻塞队列
BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(10);
线程安全操作
使用 put() 和 take() 实现阻塞式操作:
// 生产者线程
blockingQueue.put("Task");
// 消费者线程
String task = blockingQueue.take();
队列的遍历
使用迭代器或 forEach 遍历队列(注意:遍历不会移除元素):

queue.forEach(System.out::println);
for (String item : queue) {
System.out.println(item);
}
注意事项
- 队列选择:根据场景选择实现类。
LinkedList支持 null 元素,ArrayDeque性能更高但不支持 null。 - 容量限制:
ArrayBlockingQueue需指定固定容量,LinkedBlockingQueue可选。 - 线程安全:
ConcurrentLinkedQueue或BlockingQueue实现类适用于多线程环境。






