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