当前位置:首页 > Java

如何用java队列

2026-03-23 08:44:03Java

如何用java队列

如何用java队列

使用 Java 队列的基本方法

Java 提供了多种队列实现,包括 LinkedListArrayDequePriorityQueue,以及线程安全的 BlockingQueue 实现类。以下是常见队列操作示例。

导入队列相关类

import java.util.Queue;
import java.util.LinkedList;
import java.util.ArrayDeque;
import java.util.PriorityQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;

创建队列实例

// 使用 LinkedList 实现队列
Queue<Integer> linkedListQueue = new LinkedList<>();

// 使用 ArrayDeque 实现队列
Queue<String> arrayDequeQueue = new ArrayDeque<>();

// 优先级队列(元素按自然顺序或 Comparator 排序)
Queue<Double> priorityQueue = new PriorityQueue<>();

// 线程安全的阻塞队列(固定容量为 10)
BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<>(10);

基本队列操作

// 添加元素到队尾
linkedListQueue.offer(5);  // 推荐使用(不抛异常)
linkedListQueue.add(10);   // 可能抛 IllegalStateException

// 获取并移除队头元素
Integer head1 = linkedListQueue.poll();  // 返回 null 如果队列为空
Integer head2 = linkedListQueue.remove(); // 抛 NoSuchElementException 如果队列为空

// 查看但不移除队头元素
Integer peek = linkedListQueue.peek();    // 返回 null 如果队列为空
Integer element = linkedListQueue.element(); // 抛 NoSuchElementException

特殊队列用法示例

双端队列操作(ArrayDeque)

ArrayDeque<Character> deque = new ArrayDeque<>();
deque.addFirst('A');  // 添加到队头
deque.addLast('Z');   // 添加到队尾
char first = deque.removeFirst();
char last = deque.removeLast();

优先级队列自定义排序

// 使用自定义 Comparator
Queue<Person> priorityQueue = new PriorityQueue<>(
    (p1, p2) -> p1.getAge() - p2.getAge()
);
priorityQueue.offer(new Person("Alice", 30));
priorityQueue.offer(new Person("Bob", 25));
// 出队顺序按年龄从小到大

阻塞队列线程安全操作

BlockingQueue<String> bQueue = new ArrayBlockingQueue<>(3);
// 生产者线程
new Thread(() -> {
    try {
        bQueue.put("Message1");  // 阻塞直到有空间
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}).start();

// 消费者线程
new Thread(() -> {
    try {
        String msg = bQueue.take();  // 阻塞直到有元素
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}).start();

队列实现的性能比较

  • LinkedList:支持所有队列操作,适合频繁插入/删除
  • ArrayDeque:比 LinkedList 更高效的内存使用,适合大多数队列场景
  • PriorityQueue:O(log n) 时间复杂度的插入/删除,适合需要排序的场景
  • ArrayBlockingQueue:线程安全,固定容量,适合生产者-消费者模式

注意:选择具体实现时应根据是否需要线程安全、排序功能或特殊操作(如双端操作)来决定。

标签: 队列如何用
分享给朋友:

相关文章

如何用react写页面

如何用react写页面

创建React项目 使用create-react-app快速初始化项目,需提前安装Node.js环境。运行命令: npx create-react-app my-app cd my-app npm…

如何用react写页面跳转

如何用react写页面跳转

使用React Router进行页面跳转 React Router是React生态中最常用的路由管理库,适用于单页面应用(SPA)的导航和页面跳转。以下是具体实现方法: 安装React Router…

React如何用canvas画出人脸

React如何用canvas画出人脸

使用React和Canvas绘制人脸 在React中使用Canvas绘制人脸可以通过以下方法实现。这里以绘制一个简化的人脸为例,涵盖基本的脸部轮廓、眼睛、鼻子和嘴巴。 创建Canvas组件 创建一个…

react如何用ts写高阶组件

react如何用ts写高阶组件

使用 TypeScript 编写 React 高阶组件(HOC) 基本高阶组件结构 高阶组件(HOC)是一个函数,接收一个组件并返回一个新的组件。以下是 TypeScript 的基本实现方式: im…

如何用react写一个详情页

如何用react写一个详情页

使用React创建详情页 React非常适合构建动态和交互式的详情页。以下是一个基本实现方法: 创建组件结构 import React from 'react'; function Detail…

php使用redis实现队列

php使用redis实现队列

PHP 使用 Redis 实现队列 Redis 是一个高性能的键值存储系统,支持多种数据结构,如字符串、哈希、列表、集合等。利用 Redis 的列表(List)数据结构可以轻松实现队列功能。以下是实现…