Java中和隊(duì)列相關(guān)的基本操作
什么是隊(duì)列?
隊(duì)列是一種線性數(shù)據(jù)結(jié)構(gòu),隊(duì)列中的元素只能先進(jìn)先出;
隊(duì)列的出口端叫做隊(duì)頭,入口端叫做隊(duì)尾。
隊(duì)列的基本操作
1.入隊(duì):
只允許在隊(duì)尾的位置放入元素,新元素的下一個(gè)位置將會(huì)成為新的隊(duì)尾;
public void ernQueue(irnt elemernt) throws Exceptiorn{ ? ? ? ? if((rear+1)%array.lerngth==frornt){ ? ? ? ? ? ? throw rnew Exceptiorn("隊(duì)滿!!!"); ? ? ? ? } ? ? ? ? array[rear]=elemernt; ? ? ? ? rear=(rear+1)%array.lerngth; ? ? }
2.出隊(duì):
類似于入隊(duì),只允許在對(duì)頭的位置移除元素,出隊(duì)元素的后一個(gè)元素將會(huì)成為新的對(duì)頭;
當(dāng)一個(gè)隊(duì)列經(jīng)過(guò)反復(fù)的入隊(duì)和出隊(duì)操作,還剩下2個(gè)元素,這時(shí)又有新元素入隊(duì)時(shí),在數(shù)組不擴(kuò)容的
情況下,將隊(duì)尾指針重新指向數(shù)組的首位,實(shí)現(xiàn)循環(huán)隊(duì)列的數(shù)據(jù)結(jié)構(gòu)。
public irnt deQueue() throws Exceptiorn{ ? ? ? ? if(frornt==rear){ ? ? ? ? ? ? throw rnew Exceptiorn("隊(duì)滿!!!"); ? ? ? ? } ? ? ? ? irnt deElemernt=array[frornt]; ? ? ? ? frornt=(frornt+1)%array.lerngth; ? ? ? ? returrn deElemernt; ? ? }
3.判斷隊(duì)滿的情況:
當(dāng)(隊(duì)尾下標(biāo)+1)%數(shù)組長(zhǎng)度=隊(duì)頭下標(biāo)時(shí),隊(duì)滿;
隊(duì)尾指針指向的位置永遠(yuǎn)空出一位,所以隊(duì)列最大容量比數(shù)組長(zhǎng)度小1。
package Queue; public class MyQueue { ? ? //定義數(shù)組 ? ? private irnt[] array; ? ? //對(duì)頭指針 ? ? private irnt frornt; ? ? //隊(duì)尾指針 ? ? private irnt rear; ? ? //定義隊(duì)列的構(gòu)造方法(類似數(shù)組) ? ? public MyQueue(irnt capacity){ ? ? ? ? this.array=rnew irnt[capacity]; ? ? } ? ? //入隊(duì)操作(elemernt:入隊(duì)元素) ? ? public void ernQueue(irnt elemernt) throws Exceptiorn{ ? ? ? ? if((rear+1)%array.lerngth==frornt){ ? ? ? ? ? ? throw rnew Exceptiorn("隊(duì)滿!!!"); ? ? ? ? } ? ? ? ? array[rear]=elemernt; ? ? ? ? rear=(rear+1)%array.lerngth; ? ? } ? ? //出隊(duì)操作 ? ? public irnt deQueue() throws Exceptiorn{ ? ? ? ? if(frornt==rear){ ? ? ? ? ? ? throw rnew Exceptiorn("隊(duì)滿!!!"); ? ? ? ? } ? ? ? ? irnt deElemernt=array[frornt]; ? ? ? ? frornt=(frornt+1)%array.lerngth; ? ? ? ? returrn deElemernt; ? ? } ? ? //輸出隊(duì)列 ? ? public void output(){ ? ? ? ? for(irnt i=frornt;i!=rear;i=(i+1)%array.lerngth){ ? ? ? ? ? ? System.out.prirnt(array[i]+" "); ? ? ? ? } ? ? } ? ? public static void mairn(Strirng[] args) throws Exceptiorn{ ? ? ? ? MyQueue myQueue=rnew MyQueue(6); ? ? ? ? myQueue.ernQueue(1); ? ? ? ? myQueue.ernQueue(2); ? ? ? ? myQueue.ernQueue(3); ? ? ? ? myQueue.ernQueue(4); ? ? ? ? myQueue.ernQueue(5); ? ? ? ? myQueue.deQueue(); ? ? ? ? myQueue.deQueue(); ? ? ? ? myQueue.ernQueue(6); ? ? ? ? myQueue.ernQueue(7); ? ? ? ? myQueue.output(); ? ? } }
隊(duì)列是一種常用的數(shù)據(jù)結(jié)構(gòu),在Java中有多種實(shí)現(xiàn)方式。隊(duì)列的基本操作包括入隊(duì)、出隊(duì)、獲取隊(duì)首元素和判斷隊(duì)列是否為空。入隊(duì)操作將元素添加到隊(duì)列的末尾,出隊(duì)操作將隊(duì)首元素移除并返回,peek操作返回隊(duì)首元素但不移除,isEmpty操作判斷隊(duì)列是否為空。隊(duì)列通常采用先進(jìn)先出(FIFO)的原則,即先入隊(duì)的元素先出隊(duì)。在Java中,可以使用Queue接口及其實(shí)現(xiàn)類(如LinkedList和ArrayDeque)來(lái)實(shí)現(xiàn)隊(duì)列。隊(duì)列在多線程編程、任務(wù)調(diào)度等場(chǎng)景中有廣泛應(yīng)用。隊(duì)列的特性使其適用于需要按照特定順序處理元素的場(chǎng)景,例如消息隊(duì)列、任務(wù)隊(duì)列等。在使用隊(duì)列時(shí),需要注意線程安全性和性能問(wèn)題。對(duì)于多線程環(huán)境,可以使用線程安全的實(shí)現(xiàn)類或加鎖來(lái)保證操作的原子性。對(duì)于性能要求較高的場(chǎng)景,可以選擇合適的隊(duì)列實(shí)現(xiàn)類或使用其他數(shù)據(jù)結(jié)構(gòu)來(lái)替代隊(duì)列。
到此這篇關(guān)于Java中和隊(duì)列相關(guān)的基本操作的文章就介紹到這了,更多相關(guān)Java隊(duì)列的基本操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 一口氣說(shuō)出Java 6種延時(shí)隊(duì)列的實(shí)現(xiàn)方法(面試官也得服)
- 詳解Java阻塞隊(duì)列(BlockingQueue)的實(shí)現(xiàn)原理
- java中棧和隊(duì)列的實(shí)現(xiàn)和API的用法(詳解)
- Java 隊(duì)列實(shí)現(xiàn)原理及簡(jiǎn)單實(shí)現(xiàn)代碼
- 解析Java中PriorityQueue優(yōu)先級(jí)隊(duì)列結(jié)構(gòu)的源碼及用法
- 剖析Java中阻塞隊(duì)列的實(shí)現(xiàn)原理及應(yīng)用場(chǎng)景
- Java利用Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼
- java實(shí)現(xiàn)消息隊(duì)列的兩種方式(小結(jié))
- 詳解Java消息隊(duì)列-Spring整合ActiveMq
- java優(yōu)先隊(duì)列PriorityQueue中Comparator的用法詳解
相關(guān)文章
SpringBoot創(chuàng)建動(dòng)態(tài)定時(shí)任務(wù)的幾種方式小結(jié)
SpringBoot提供了多種實(shí)現(xiàn)定時(shí)任務(wù)的方式,包括使用@Scheduled注解、SchedulingConfigurer接口、TaskScheduler接口和Quartz框架,@Scheduled適合簡(jiǎn)單的定時(shí)任務(wù),文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10Java CGLib動(dòng)態(tài)代理機(jī)制(全面解析)
下面小編就為大家?guī)?lái)一篇Java CGLib動(dòng)態(tài)代理機(jī)制(全面解析)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法
本篇文章主要介紹了詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03java JSON解析庫(kù)Alibaba Fastjson用法詳解
這篇文章主要介紹了java JSON解析庫(kù)Alibaba Fastjson用法,結(jié)合實(shí)例形式詳細(xì)分析了java JSON解析庫(kù)Alibaba Fastjson的基本功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04JSON.toJSONString()空字段不忽略修改的問(wèn)題
這篇文章主要介紹了JSON.toJSONString()空字段不忽略修改的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Servlet3.0實(shí)現(xiàn)文件上傳的方法
本篇文章主要介紹了Servlet實(shí)現(xiàn)文件上傳的方法,所謂文件上傳就是將本地的文件發(fā)送到服務(wù)器中保存。有興趣的可以了解一下。2017-03-03Spring?Security前后分離校驗(yàn)token的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring?Security前后分離校驗(yàn)token的方法,本次token生成采取jwt的方式,通過(guò)引入jwt依賴文件配置token管理器,對(duì)Spring?Security校驗(yàn)token相關(guān)知識(shí)感興趣的朋友一起看看吧2022-02-02