当前位置:首页 > Java

java 队列如何使用

2026-03-25 08:19:21Java

Java 队列的基本使用

Java 提供了多种队列实现,主要通过 Queue 接口及其子接口(如 DequeBlockingQueue)和实现类(如 LinkedListArrayDequePriorityQueue)来完成队列操作。

队列的创建

使用 LinkedListArrayDeque 实现普通队列:

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 常用于多线程场景,如 ArrayBlockingQueueLinkedBlockingQueue

创建阻塞队列

BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(10);

线程安全操作

使用 put()take() 实现阻塞式操作:

// 生产者线程
blockingQueue.put("Task");

// 消费者线程
String task = blockingQueue.take();

队列的遍历

使用迭代器或 forEach 遍历队列(注意:遍历不会移除元素):

java 队列如何使用

queue.forEach(System.out::println);
for (String item : queue) {
    System.out.println(item);
}

注意事项

  1. 队列选择:根据场景选择实现类。LinkedList 支持 null 元素,ArrayDeque 性能更高但不支持 null。
  2. 容量限制ArrayBlockingQueue 需指定固定容量,LinkedBlockingQueue 可选。
  3. 线程安全ConcurrentLinkedQueueBlockingQueue 实现类适用于多线程环境。

分享给朋友:

相关文章

php实现队列

php实现队列

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

react如何使用函数

react如何使用函数

使用函数组件的基本语法 在React中,函数组件是通过JavaScript函数定义的组件。函数接收props作为参数,并返回React元素。 function Welcome(props) {…

uniapp队列下载

uniapp队列下载

uniapp 实现队列下载的方法 在 uniapp 中实现队列下载通常需要管理多个下载任务,确保它们按顺序执行。可以通过以下方法实现: 使用 Promise 和递归实现队列下载 定义一个下载队列数…

react激光如何使用

react激光如何使用

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

react如何使用jquery

react如何使用jquery

在 React 中使用 jQuery React 和 jQuery 的设计理念不同,React 基于虚拟 DOM 和数据驱动,而 jQuery 直接操作真实 DOM。若需在 React 中整合 jQu…

react如何使用link

react如何使用link

使用 Link 组件进行页面导航 在 React 中,Link 是 react-router-dom 提供的组件,用于在单页应用(SPA)中实现客户端路由导航,避免页面刷新。 安装 react-…