可爱男孩 發表於 2025-7-7 00:46:00

Java中的队列与参数传递

<h2 id="java中的队列数据结构">Java中的队列数据结构</h2>
<h3 id="定义">定义:</h3>
<p>队列(Queue)是一种<strong>先进先出(FIFQ)</strong>的线性数据结构</p>
<h3 id="基本性质">基本性质:</h3>
<ol>
<li>先进先出</li>
<li>主要操作<br>
2.1 入队:向队尾插入元素<br>
2.2 出队:从队首移除元素</li>
<li>只允许在队首删除,在队尾插入<br>
<img src="https://img2024.cnblogs.com/blog/3417030/202507/3417030-20250707004540267-1473698389.png"></li>
<li>Queue 继承 Collection</li>
</ol>
<h3 id="常见用方法">常见用方法:</h3>
<p><img src="https://img2024.cnblogs.com/blog/3417030/202507/3417030-20250707004549676-1009611785.png"><br>
<strong>注意:</strong> add、remove、element操作时可能抛异常(队列为满或空)</p>
<h3 id="实现类">实现类:</h3>
<ol>
<li>LinkedList:双向链表,同时实现了List与Queue接口</li>
<li>ArrayDeque:基于数组的双端队列:添加与移除元素较低复杂度</li>
<li>Priority Queue :根据元素自然顺序或比较器决定队列顺序,基于优先级堆和无界优先级队列实现。</li>
</ol>
<h3 id="应用场景">应用场景:</h3>
<ol>
<li>消息队列<br>
系统间异步通信:生产者生产资料发送到队列中,消费者从队列中取出。</li>
<li>线程池任务调度<br>
按照顺序执行任务,通常用队列存储待执行的任务</li>
<li>缓存淘汰策略<br>
用于限制缓存大小,当缓存满时,通过队列的先进先出淘汰最早添加的元素。</li>
<li>网络请求调度<br>
处理请求队列,按照先到先处理的顺序</li>
<li>广度优先搜索(BFS)</li>
</ol>
<h3 id="双端队列接口">双端队列接口:</h3>
<p>Deque 继承 Queue<br>
<strong>实现类:</strong>LinkedList,ArrayDeque,LinkedBlockingDeque<br>
三种用途:</p>
<ol>
<li>普通队列:一段进一段出</li>
<li>双端队列:两端都可以进出</li>
<li>堆栈:push、pop、peek</li>
</ol>
<h2 id="java参数传递">Java参数传递</h2>
<p><strong>明确:Java只有值传递</strong></p>
<h3 id="两种类型">两种类型</h3>
<ol>
<li>基本类型:传递的时值的<strong>副本</strong>。</li>
<li>引用类型:传递的是引用的“值”(即地址)的<strong>副本</strong>。<br>
所以在方法中,改变形参的值(基本类型)或引用的值即指向其他地址(引用类型)调用者不会察觉。</li>
</ol>
<h3 id="面试一问">面试一问:</h3>
<p>Java中String作为参数传递时,传递的是值还是引用。</p>
<ol>
<li>String是对象,但是是<strong>不可变对象</strong>。</li>
<li>传递String参数时,<strong>传递的是引用的副本</strong>;但是因为String不变,方法内部的<strong>修改实际上是创建新对象</strong>,不会影响原来的变量也就是<strong>调用者感知不到</strong>,所以就<strong>好像是传递的是值的副本一样,其实是引用的副本</strong>。</li>
</ol><br><br>
来源:https://www.cnblogs.com/waterme123/p/18969649
頁: [1]
查看完整版本: Java中的队列与参数传递