当前位置:首页 > Java

java如何使用队列

2026-03-04 01:12:16Java

队列的基本概念

队列是一种先进先出(FIFO)的数据结构,元素从队尾添加(入队),从队头移除(出队)。Java提供了多种实现队列的方式,包括内置接口和类。

使用Queue接口

Java的Queue接口定义了队列的基本操作,常用实现类包括LinkedListPriorityQueue

java如何使用队列

import java.util.Queue;
import java.util.LinkedList;

Queue<String> queue = new LinkedList<>();
queue.add("A"); // 入队,失败时抛出异常
queue.offer("B"); // 入队,失败时返回false
String head = queue.remove(); // 出队,队列为空时抛出异常
head = queue.poll(); // 出队,队列为空时返回null
String peek = queue.element(); // 查看队头,队列为空时抛出异常
peek = queue.peek(); // 查看队头,队列为空时返回null

使用Deque实现双端队列

Deque(双端队列)支持从两端操作元素,既可以作为队列也可以作为栈。

import java.util.Deque;
import java.util.ArrayDeque;

Deque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1); // 队头添加
deque.addLast(2); // 队尾添加
int first = deque.removeFirst(); // 队头移除
int last = deque.removeLast(); // 队尾移除

优先队列PriorityQueue

优先队列根据元素的优先级出队,默认按自然顺序排序,也可通过Comparator自定义。

java如何使用队列

import java.util.PriorityQueue;
import java.util.Comparator;

Queue<Integer> pq = new PriorityQueue<>();
pq.offer(3);
pq.offer(1);
pq.offer(2);
while (!pq.isEmpty()) {
    System.out.println(pq.poll()); // 输出顺序:1, 2, 3
}

// 自定义排序
Queue<String> customPq = new PriorityQueue<>(Comparator.reverseOrder());
customPq.offer("B");
customPq.offer("A");
System.out.println(customPq.poll()); // 输出:B

阻塞队列BlockingQueue

适用于多线程场景,当队列为空或满时,操作会阻塞或等待。常用实现类为LinkedBlockingQueueArrayBlockingQueue

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

BlockingQueue<String> bq = new LinkedBlockingQueue<>(2);
bq.put("X"); // 阻塞直到队列有空位
String item = bq.take(); // 阻塞直到队列有元素

线程安全的队列

ConcurrentLinkedQueue是无锁线程安全队列,适合高并发场景。

import java.util.concurrent.ConcurrentLinkedQueue;

ConcurrentLinkedQueue<String> clq = new ConcurrentLinkedQueue<>();
clq.offer("Task");
String task = clq.poll();

注意事项

  • 选择队列实现时需考虑线程安全、容量限制和性能需求。
  • LinkedList支持null元素,但ArrayDequePriorityQueue不支持。
  • 阻塞队列在多线程编程中常用于生产者-消费者模型。

分享给朋友:

相关文章

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

uniapp中如何使用iconfont

uniapp中如何使用iconfont

使用 Iconfont 在 Uniapp 中的步骤 下载 Iconfont 资源 访问 Iconfont 官网,选择需要的图标并添加到项目。下载时选择 Font class 格式,解压后会得到 .tt…

react router如何使用

react router如何使用

React Router 的基本使用 安装 React Router 库,使用 npm 或 yarn 进行安装: npm install react-router-dom 配置路由 在应用的入口文件…

react refs如何使用

react refs如何使用

React Refs 的基本概念 Refs 提供了一种直接访问 DOM 节点或 React 组件实例的方式。通常在需要直接操作 DOM 或访问组件方法时使用。 创建 Refs 使用 React.c…

react激光如何使用

react激光如何使用

安装React激光库 在项目中安装React激光库,通常通过npm或yarn完成。确保项目已初始化并具备React环境。 npm install react-laser-beam # 或 yar…