当前位置: 首页 > 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.zskr.cn/news/10153.html

相关文章:

  • Ashampoo Music Studio 12.0.3 音频编辑处理
  • Gitee:本土化代码托管平台如何重塑中国开发者协作生态
  • WEB项目引入druid监控配置
  • PyCharm 2025.1安装包下载与安装教程
  • 1. 大模型的选择详细分析 - Rainbow
  • 批量查询设计桩号方法及文件格式
  • 详细介绍:树上LCA和树链剖分(未完待续)
  • 无人机、人形机器人 —— 电池电压(电量)对运行状态的影响
  • freertos.c解析 - 教程
  • 【html组件】简易漫画阅读器
  • 21 C++ 哈希表入门:unordered_set/unordered_map 用法 + 与 set/map 性能 / 迭代器差异全解 - 教程
  • ubuntu安装mysql2
  • 高并发系统核心指标
  • java创建线程池去实现某个任务(多线程)
  • 敏捷已死?2025年项目管理软件支持的混合管理模式正成为新主流!
  • 开源中国社区:AI驱动下的开发者生态革命
  • 日志清理脚本模板 - 一叶舟
  • [原创]《C#高级GDI+实战:从零开发一个流程图》第10章:鼠标拖动完成连线、拖动时实时显示半透明虚线连线效果、自定义连接点样式
  • 马来西亚股票数据API对接文档
  • [OpenGL]相机环境
  • HT-SC4PS-33+:小功分大胃口,300 MHz-3 GHz全场通吃
  • 画面拼接后推流/64路画面同时拼接到一路流/指定程序窗口采集推流/另一种解决方案
  • 软件开发 --- 快速部署web
  • BIM建模利器 Tekla Structures 2025 全流程安装指南
  • 百度云服务ubtuntu安装docker
  • ubuntu安装mysql8并切换数据存储目录
  • Create lv of type vdo on RHEL8 9
  • Notepad++ 最新破解版下载及安装使用教程
  • 详细介绍:【Datawhale25年9月组队学习:llm-preview+Task1:大模型介绍与环境配置】
  • Git仓库ssh不同环境配置