当前位置:首页 > Java

如何用java队列

2026-03-23 08:44:03Java

使用 Java 队列的基本方法

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

如何用java队列

导入队列相关类

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:线程安全,固定容量,适合生产者-消费者模式

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

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

相关文章

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

如何用记事本写java

如何用记事本写java

使用记事本编写Java代码的方法 安装Java开发工具包(JDK)并配置环境变量。确保在命令行输入java -version和javac -version能正确显示版本信息。 创建一个新文本文件,将…

如何用java画图

如何用java画图

使用 Java 绘图基础 Java 提供了多种绘图方式,主要通过 java.awt 和 javax.swing 包中的类实现。以下是几种常见的绘图方法。 使用 Graphics 类绘图 Graphi…

vue实现队列消息

vue实现队列消息

Vue 实现队列消息 在 Vue 中实现队列消息功能,可以通过以下方法实现一个简单的消息队列系统,用于显示和管理临时通知(如成功、错误提示)。 使用 Vuex 管理消息队列 创建一个 Vuex st…

react hooks如何用

react hooks如何用

使用 React Hooks 的基本方法 React Hooks 是 React 16.8 引入的功能,允许在函数组件中使用状态和其他 React 特性。以下是几种常用 Hooks 的用法。 use…

如何用react做增删

如何用react做增删

使用React实现增删功能 在React中实现增删功能通常涉及状态管理和列表渲染。以下是一个完整的实现方案: 初始化状态 需要定义一个状态来存储列表数据,可以使用useState钩子: c…