隊(duì)列 Queue
隊(duì)列是一種FIFO的線性數(shù)據(jù)結(jié)構(gòu)糯笙,front
指針指向?qū)︻^(第一個(gè)元素)姆泻,rear
指針指向隊(duì)尾(最后一個(gè)元素的下一個(gè)空白的位置)
假溢出:
環(huán)形隊(duì)列:
隊(duì)列元素的判斷:
- 隊(duì)列為空:front == rear
- 隊(duì)列為滿(mǎn): (rear+1)%N == front
- 隊(duì)列元素個(gè)數(shù):(rear-front + N)%N
優(yōu)先級(jí)隊(duì)列 :
隊(duì)列里的元素都有一個(gè)優(yōu)先級(jí),優(yōu)先級(jí)高的先出隊(duì)列
- MessageQueue
- PriorityQueue
棧 Stack
一種FILO的線性數(shù)據(jù)結(jié)構(gòu)谋梭,只能在一段進(jìn)行操作
應(yīng)用:
- 計(jì)算機(jī)計(jì)算,后綴表達(dá)式
- activity活動(dòng)棧
- JVM內(nèi)存模型的棧區(qū)(方法調(diào)用),幀棧(計(jì)算)
堆 Heap
堆通承鹕恚可以看做一個(gè)完全二叉樹(shù)
應(yīng)用:
- JVM堆,存放對(duì)象內(nèi)存
棧解決了程序運(yùn)行問(wèn)題硫狞,堆解決了數(shù)據(jù)存儲(chǔ)問(wèn)題
- Stack與heap都運(yùn)行在內(nèi)存上信轿,在內(nèi)存空間上字節(jié)碼指令不必?fù)?dān)心不同機(jī)器上的區(qū)別晃痴,所以JVM實(shí)現(xiàn)了與平臺(tái)無(wú)關(guān)的特性。
- JVM棧的每個(gè)棧幀(slot)大小都是4bytes财忽,而一個(gè)slot恰好可以保持一個(gè)對(duì)象引用倘核,所以引用永遠(yuǎn)是4bytes