棧:這是一個(gè)先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),生活中類似的瀏覽器的返回上一頁(yè)就可以利用此結(jié)構(gòu)實(shí)現(xiàn),代碼如下:
publicclassStack<T>{ privateObject[]data;//存儲(chǔ)數(shù)據(jù) privateinttop;//表示棧頂元素 publicStack(){ data=newObject[100];//為了說(shuō)明原理隨意指定 top=-1; } publicsynchronizedvoidput(Tt){//壓?! ata[data.length]=t; top++; } publicsynchronizedTpop(){//出?! f(top<0){ returnnull; } Tt=(T)data[top]; top--; returnt; } }
這只是我自己的Java實(shí)現(xiàn)只說(shuō)明原理,但實(shí)際在java中是利用vector來(lái)存儲(chǔ)數(shù)據(jù)的,我們知道vector其實(shí)是一個(gè)線程安全的ArrayList,而ArrayList的底層也是一個(gè)數(shù)組,所以原理上大同小異
隊(duì)列:隊(duì)列其實(shí)就是我們生活中的排隊(duì)現(xiàn)象,先進(jìn)入的先出,后進(jìn)入的后出,代碼實(shí)現(xiàn)如下:
publicclassQueue<T>{ privateObject[]data;//存儲(chǔ)數(shù)據(jù) privateinthead;//頭 privateinttail;//尾 publicQueue(){ data=newObject[100];//為了說(shuō)明原理隨意指定 head=1; tail=1; } publicvoidput(Tt){ data[tail]=t; tail++; } publicTget(){ Tt=(T)data[head]; head++; returnt; } }
如上所示,也只是說(shuō)明原理,其實(shí)在javajdk中也有許多不同的對(duì)列,并且對(duì)列可以由數(shù)組實(shí)現(xiàn),也可以由鏈表實(shí)現(xiàn),下面介紹鏈表
鏈表是一個(gè)類似于現(xiàn)實(shí)中串項(xiàng)鏈的數(shù)據(jù)結(jié)構(gòu),前一個(gè)數(shù)據(jù)指向后一個(gè)數(shù)據(jù),當(dāng)然也可以后一個(gè)數(shù)據(jù)指向前一個(gè)數(shù)據(jù),這就是雙向鏈表,這里不做討論
publicclassMyNode<T>{ privateNode<T>headNode; publicMyNode(Tt){ headNode=newNode<>(t,null); } publicMyNode(){ } privatestaticclassNode<E>{ Objecte; Node<E>next; Node(Eelement,Node<E>next){ this.e=element; this.next=next; } } publicvoidput(Tt){ if(headNode==null){ headNode=newNode<>(t,null); }else{ headNode=newNode<>(t,headNode); } } publicTget(intindex){ Nodenode=headNode; for(inti=2;i<index;i++){ node=node.next; } Tt=(T)node.e; returnt; } }
以上就是用Java實(shí)現(xiàn)的簡(jiǎn)單鏈表,還有雙向鏈表是一個(gè)元素指向前一個(gè)元素和后一個(gè)元素,原理大概相同,這里可以看書鏈表中取固定位置的數(shù)據(jù)是非常麻煩的,必須從第一個(gè)開始依次查找,這也就是linklist不用for(inti=0;i++;i<size())遍歷的原因,因?yàn)閘inklist的底層就是通過(guò)鏈表來(lái)實(shí)現(xiàn)的
以上就是長(zhǎng)沙牛耳教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java基礎(chǔ)學(xué)習(xí):Java實(shí)現(xiàn)隊(duì)列”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。