当前位置: 首页 > news >正文

java列队多种实现方式,

在Java中,队列(Queue)是一种常用的数据结构,遵循FIFO(先进先出)原则。Java提供了多种队列实现方式,适用于不同的场景。以下是几种常见的队列实现方式:

  1. LinkedList实现
    LinkedList实现了Queue接口,可以作为队列使用,它是一个双向链表结构。
import java.util.LinkedList;
import java.util.Queue;public class LinkedListQueueExample {public static void main(String[] args) {Queue<String> queue = new LinkedList<>();// 添加元素queue.add("元素1");queue.offer("元素2");// 获取队头元素(不删除)System.out.println("队头元素: " + queue.peek());// 获取并删除队头元素while (!queue.isEmpty()) {System.out.println("出队元素: " + queue.poll());}}
}
  1. ArrayDeque实现
    ArrayDeque是基于数组的双端队列,既可以作为队列使用,也可以作为栈使用,性能通常比LinkedList更好。
import java.util.ArrayDeque;
import java.util.Queue;public class ArrayDequeQueueExample {public static void main(String[] args) {Queue<Integer> queue = new ArrayDeque<>();// 添加元素for (int i = 1; i <= 5; i++) {queue.offer(i);}// 遍历队列System.out.println("队列元素: " + queue);// 出队操作while (!queue.isEmpty()) {System.out.println("出队: " + queue.poll());}}
}
  1. PriorityQueue实现
    PriorityQueue是一个优先级队列,它不是按照元素的插入顺序,而是按照元素的优先级进行排序。
import java.util.PriorityQueue;
import java.util.Queue;public class PriorityQueueExample {public static void main(String[] args) {// 自然排序(从小到大)Queue<Integer> priorityQueue = new PriorityQueue<>();// 添加元素priorityQueue.offer(3);priorityQueue.offer(1);priorityQueue.offer(5);priorityQueue.offer(2);// 出队(按优先级顺序)while (!priorityQueue.isEmpty()) {System.out.println("出队: " + priorityQueue.poll());}}
}
  1. ConcurrentLinkedQueue实现
    ConcurrentLinkedQueue是一个线程安全的无界队列,适用于多线程环境。
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;public class ConcurrentQueueExample {public static void main(String[] args) throws InterruptedException {Queue<String> concurrentQueue = new ConcurrentLinkedQueue<>();// 线程1:添加元素Thread producer = new Thread(() -> {for (int i = 1; i <= 5; i++) {concurrentQueue.offer("元素" + i);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}});// 线程2:取出元素Thread consumer = new Thread(() -> {while (true) {String element = concurrentQueue.poll();if (element != null) {System.out.println("消费: " + element);}if (element != null && element.equals("元素5")) {break;}try {Thread.sleep(150);} catch (InterruptedException e) {e.printStackTrace();}}});producer.start();consumer.start();producer.join();consumer.join();}
}
  1. 阻塞队列实现
    Java提供了多种阻塞队列,如ArrayBlockingQueueLinkedBlockingQueue等,它们在队列为空或满时会阻塞线程。

选择哪种队列实现取决于具体需求:

  • 单线程环境且需要简单队列:LinkedListArrayDeque
  • 需要优先级排序:PriorityQueue
  • 多线程环境:ConcurrentLinkedQueue
  • 需要线程阻塞功能:各种阻塞队列(如ArrayBlockingQueue

阻塞队列特别适合生产者-消费者模式,能够很好地协调生产和消费速度,避免忙等待。

http://www.hskmm.com/?act=detail&tid=14520

相关文章:

  • Ashampoo Music Studio 12.0.3 音频编辑处理
  • Gitee:本土化代码托管平台如何重塑中国开发者协作生态
  • WEB项目引入druid监控配置
  • Computer Graphics Tutorial
  • CF1874(CF Round 901) 总结
  • 2. Spring AI 快速入门使用 - Rainbow
  • PyCharm 2025.1安装包下载与安装教程
  • 阿里将发布多模态模型 Qwen3-Omni,主打多语言与复杂推理;DeepvBrowser 上线 AI 语音浏览器丨日报
  • Word文档内容批量替换脚本 - wanghongwei
  • VMware ESXi 磁盘置备类型详解
  • EF 数据迁移生成sql脚本
  • HWiNFO 硬件信息检测工具下载与安装教程
  • 第七章 手写数字识别V1
  • 西电PCB设计指南1~2章学习笔记
  • 1. 大模型的选择详细分析 - Rainbow
  • 云计算实践部署笔记
  • [eJOI 2024] 奶酪交易 / Cheese
  • 逆向分析之switch语句
  • 批量查询设计桩号方法及文件格式
  • 搭建Python的运行开发环境
  • 【HBase 原理部署安装 01】
  • 打破数据壁垒,DMS Data Agent 开启智能分析之旅
  • Ruby IPAddr正则表达式拒绝服务漏洞分析与修复
  • 模型驱动的 AI Agent架构:亚马逊云科技的Strands框架技术深度解析
  • cache支持的软件操作
  • PHP 静态分析工具实战 PHPStan 和 Psalm 完全指南
  • tests-stats/regression.sh
  • 光隔离探头技术解析:高电压测量的安全革命​​
  • freertos.c解析 - 教程
  • 从缺陷管理到质量协作:现代Bug工具的范式升级