要想理解方法執(zhí)行過(guò)程中內(nèi)存的分配,我們需要先學(xué)習(xí)一下棧數(shù)據(jù)結(jié)構(gòu),那么什么是數(shù)據(jù)結(jié)構(gòu)呢?其實(shí)數(shù)據(jù)結(jié)構(gòu)是一門(mén)獨(dú)立的學(xué)科,不僅是在java編程中需要使用,在其它編程語(yǔ)言中也會(huì)使用,在大學(xué)的計(jì)算機(jī)課程當(dāng)中,數(shù)據(jù)結(jié)構(gòu)和算法通常作為必修課出現(xiàn),而且是在學(xué)習(xí)任何一門(mén)編程語(yǔ)言之前先進(jìn)行數(shù)據(jù)結(jié)構(gòu)和算法的學(xué)習(xí)。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來(lái)更高的運(yùn)行或者存儲(chǔ)效率。數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技術(shù)有關(guān)。
常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)有哪些呢?例如:棧、隊(duì)列、鏈表、數(shù)組、樹(shù)、圖、堆、散列表等。目前我們先來(lái)學(xué)習(xí)一下棧(stack)數(shù)據(jù)結(jié)構(gòu),這是一種非常簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。如下圖所示:
圖7-7:棧數(shù)據(jù)結(jié)構(gòu)
棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。其限制是:僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱(chēng)為棧頂,相對(duì)地,把另一端稱(chēng)為棧底。向一個(gè)棧插入新元素又稱(chēng)作進(jìn)棧、入棧或壓棧(push),它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個(gè)棧刪除元素又稱(chēng)作出棧、退棧或彈棧(pop),它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。如下圖所示:
圖7-8:棧數(shù)據(jù)結(jié)構(gòu)
通過(guò)以上的學(xué)習(xí),我們可以得知棧數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)有這樣的特點(diǎn):先進(jìn)后出,或者后進(jìn)先出原則。也就是說(shuō)最先進(jìn)去的元素一定是最后出去,最后進(jìn)去的元素一定是最先出去,因?yàn)橐欢耸情_(kāi)口的,另一端是封閉的。
對(duì)于棧數(shù)據(jù)結(jié)構(gòu),目前我們了解這么多就可以了,等學(xué)完“方法執(zhí)行的時(shí)候內(nèi)存是如何變化的”,到那個(gè)時(shí)候大家再思考一個(gè)問(wèn)題,為什么方法執(zhí)行過(guò)程的內(nèi)存要采用棧這種數(shù)據(jù)結(jié)構(gòu)呢,為什么不選擇其它數(shù)據(jù)結(jié)構(gòu)呢?