Java中的队列数据结构

定义:

队列(Queue)是一种先进先出(FIFQ)的线性数据结构

基本性质:

  1. 先进先出
  2. 主要操作

    2.1 入队:向队尾插入元素

    2.2 出队:从队首移除元素
  3. 只允许在队首删除,在队尾插入

  4. Queue 继承 Collection

常见用方法:



注意: add、remove、element操作时可能抛异常(队列为满或空)

实现类:

  1. LinkedList:双向链表,同时实现了List与Queue接口
  2. ArrayDeque:基于数组的双端队列:添加与移除元素较低复杂度
  3. Priority Queue :根据元素自然顺序或比较器决定队列顺序,基于优先级堆和无界优先级队列实现。

应用场景:

  1. 消息队列

    系统间异步通信:生产者生产资料发送到队列中,消费者从队列中取出。
  2. 线程池任务调度

    按照顺序执行任务,通常用队列存储待执行的任务
  3. 缓存淘汰策略

    用于限制缓存大小,当缓存满时,通过队列的先进先出淘汰最早添加的元素。
  4. 网络请求调度

    处理请求队列,按照先到先处理的顺序
  5. 广度优先搜索(BFS)

双端队列接口:

Deque 继承 Queue

实现类:LinkedList,ArrayDeque,LinkedBlockingDeque

三种用途:

  1. 普通队列:一段进一段出
  2. 双端队列:两端都可以进出
  3. 堆栈:push、pop、peek

Java参数传递

明确:Java只有值传递

两种类型

  1. 基本类型:传递的时值的副本
  2. 引用类型:传递的是引用的“值”(即地址)的副本

    所以在方法中,改变形参的值(基本类型)或引用的值即指向其他地址(引用类型)调用者不会察觉。

面试一问:

Java中String作为参数传递时,传递的是值还是引用。

  1. String是对象,但是是不可变对象
  2. 传递String参数时,传递的是引用的副本;但是因为String不变,方法内部的修改实际上是创建新对象,不会影响原来的变量也就是调用者感知不到,所以就好像是传递的是值的副本一样,其实是引用的副本

Java中的队列与参数传递的更多相关文章

  1. Java 中的队列 Queue

    一.队列的定义 我们都知道队列(Queue)是一种先进先出(FIFO)的数据结构,Java中定义了java.util.Queue接口用来表示队列.Java中的Queue与List.Set属于同一个级别 ...

  2. java中有界队列的饱和策略(reject policy)

    文章目录 AbortPolicy DiscardPolicy DiscardOldestPolicy CallerRunsPolicy 使用Semaphore java中有界队列的饱和策略(rejec ...

  3. java中使用队列:java.util.Queue (转)

    Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接 口.Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类 ...

  4. java中的队列

    转载自:http://blog.csdn.net/guijava/article/details/3784658 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.Qu ...

  5. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  6. Java中的队列:java.util.Queue接口

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作. Queue接口与List.Set同一级别,都是继承了Collection接口.Linked ...

  7. java中线程队列BlockingQueue的用法

    在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利.本文 ...

  8. java中使用队列:java.util.Queue

    在java5中新添加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.Queue使用时要尽量避免Collection的add()和 ...

  9. Java中的队列同步器AQS

    一.AQS概念 1.队列同步器是用来构建锁或者其他同步组件的基础框架,使用一个int型变量代表同步状态,通过内置的队列来完成线程的排队工作. 2.下面是JDK8文档中对于AQS的部分介绍 public ...

  10. java中使用队列:java.util.Queue(转)

    队列是一种特殊的线性表,是运算受到限制的一种线性表,只允许在表的一端进行插入,而在另一端进行删除元素的线性表.队尾(rear)是允许插入的一端.队头(front)是允许删除的一端.空队列是不含元素的空 ...

随机推荐

  1. Win10锁屏与关机相关设置-注册表

    禁用锁屏 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData ...

  2. 第一次3D打印,一个简单的小方块(rhino)

    一.建模 打开犀牛,我们选择立方体 我们点击上册的中心点 输入0,然后回车0 而后我们输长度:10,回车确认 同样的,宽度10 高度同样是10 回车确认后,我们得到一个正方形 二.导出模型 我们选择文 ...

  3. 基于Lighthouse搭建高颜值的YesPlayMusic网易云播放器

    本文介绍了如何使用腾讯云的Lighthouse轻量应用服务器来搭建一个高颜值的第三方网易云播放器. 项目简介 本文使用的是YesPlayMusic项目,这是一款高颜值的第三方网易云播放器,它完全可以作 ...

  4. Web前端入门第 29 问:CSS 盒模型:网页布局的基石

    在 Web 网页开发中,盒模型(Box Model) 是 CSS 的核心概念,它决定了每个 HTML 元素在页面中占据的空间和布局方式. 无论是文本.图片还是按钮,浏览器都会将它们视为一个矩形盒子,并 ...

  5. RL · Exploration | 使用时序距离构造 intrinsic reward,鼓励 agent 探索

    论文标题:Episodic Novelty Through Temporal Distance. ICLR 2025,8 8 6 5 poster. arxiv:https://arxiv.org/a ...

  6. docker容器运行,交互式与守护式的区别

    一.使用交互式运行容器,容器运行后直接进入到容器内部,退出容器内部后,容器直接关闭

  7. eolinker校验规则之 Json Path定位:返回值内有多项同类参数,检验其中一个参数值

    比如创建商品后,查询商品是否生成,执行完创建商品接口后就需要再执行查询商品接口. 查询接口查询出来的数据可能包括所有商品数据或者有同名商品数据,所有整个返回结果内可能包含多个同名不同商品id的数据 往 ...

  8. Spring Boot 不能加载 tcnative-2.dll 库(Can't load library: tcnative-2.dll)

    Spring Boot 不能加载 tcnative-2.dll 库 本文将介绍怎样解决 Spring Boot 在启动时抛出 "org.apache.tomcat.jni.LibraryNo ...

  9. 【HUST】网安|操作系统实验|实验三 内存管理

    文章目录 任务 任务1 Win/Linux编写二维数组遍历程序,理解局部性的原理. 1. 提示 2. 任务代码 3. 结果及说明 任务2 Windows/Linux模拟实现OPT和LRU淘汰算法. 1 ...

  10. 痞子衡嵌入式:聊聊i.MXRT1024/1064片内4MB Flash的SFDP表易丢失导致的烧录异常

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1024/1064片内4MB Flash的SFDP表易丢失导致的烧录异常. 我们知道 i.MXRT 系列本身并没有片内非易失 ...