找回密码
 立即注册
首页 业界区 业界 Java中的队列与参数传递

Java中的队列与参数传递

百里宵月 6 小时前
Java中的队列数据结构

定义:

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


  • 先进先出
  • 主要操作
    2.1 入队:向队尾插入元素
    2.2 出队:从队首移除元素
  • 只允许在队首删除,在队尾插入
    1.png

  • Queue 继承 Collection
常见用方法:

2.png

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


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


  • 消息队列
    系统间异步通信:生产者生产资料发送到队列中,消费者从队列中取出。
  • 线程池任务调度
    按照顺序执行任务,通常用队列存储待执行的任务
  • 缓存淘汰策略
    用于限制缓存大小,当缓存满时,通过队列的先进先出淘汰最早添加的元素。
  • 网络请求调度
    处理请求队列,按照先到先处理的顺序
  • 广度优先搜索(BFS)
双端队列接口:

Deque 继承 Queue
实现类:LinkedList,ArrayDeque,LinkedBlockingDeque
三种用途:

  • 普通队列:一段进一段出
  • 双端队列:两端都可以进出
  • 堆栈:push、pop、peek
Java参数传递

明确:Java只有值传递
两种类型


  • 基本类型:传递的时值的副本
  • 引用类型:传递的是引用的“值”(即地址)的副本
    所以在方法中,改变形参的值(基本类型)或引用的值即指向其他地址(引用类型)调用者不会察觉。
面试一问:

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

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册