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. 从零创建npm依赖,只需执行一条命令

    由来 最近在弄新的npm依赖,但是发现没有都从头创建项目实属有点儿麻烦,然后我找了之前开发的依赖,将多余代码删除了作为初始化的项目.于是~为什么不弄个模版,每次只需要初始化模版即可,所以就有了这个模版 ...

  2. 聊聊AI Agent与AI 数字分身

    提供AI应用咨询+陪跑服务,有需要回复1 Manus爆火后,网上出现了很多AI热门名词,比如Agent.AI分身,并且有一张技术架构实现图: 怎么说呢,也许这张图是对的,但就我这边实际的项目实践情况以 ...

  3. Coze实现古诗文图集

    Coze实现古诗文图集   目标:通过Coze自动化生成古诗配图,并将多张图片排版到画板中,最终直接在对话框展示完整图集(而非链接). 思路: 用户输入诗句 → 2. 补全古诗 → 3.拆分诗文 → ...

  4. 15.4K Star!Vercel官方出品,零基础构建企业级AI聊天机器人

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "基于Next.js 14和AI SDK打造的Chat SDK,让开发者快速构建支 ...

  5. Java编程--简单的Factory程序(工厂设计模式)

    Factory类不是接口.抽象类,就是普通的类. Factory就像一个工厂一样,可以返回很多对象. 子类在继承.实现抽象类和接口后由Factory类处理,由于子类可能会有多个,Factory根据客户 ...

  6. 工具 | Hacking

    0x00 简介 Hacking是一款包含多种渗透测试功能的脚本. 下载地址: Hacking下载:Hacking下载 0x01 功能说明 Brute Force DDos Attack NMap Po ...

  7. 如何在 Linux 上检查开放的端口并关闭不需要的端口

    检查服务器开放端口并关闭不必要的端口是网络安全管理中的关键环节,开放端口如同服务器的"窗口",若其中存在未被利用或未受保护的端口,就如同为潜在的攻击者敞开了大门,他们可能会利用这些 ...

  8. IPO——LeetCode⑫

    //原题链接https://leetcode.com/problems/ipo/ 题目描述 Suppose LeetCode will start its IPO soon. In order to ...

  9. Qt图像处理技术六:拉普拉斯锐化

    Qt图像处理技术六:拉普拉斯锐化 效果图 源码 由该公式得到下方卷积核 使用到的卷积核: //都把QImage转化为rgb888更好运算 QImage LaplaceSharpen(const QIm ...

  10. python3里面实现将日志文件写入当前脚本运行的文本中

    在 Python3 中,可以使用 logging 模块来实现将日志写入本地文本文件中.下面是一个简单的示例代码: import logging # 配置 logging 模块 logging.basi ...