JavaSE(二十一)——栈和队列、栈和堆
生活随笔
收集整理的這篇文章主要介紹了
JavaSE(二十一)——栈和队列、栈和堆
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 棧和隊列
- 1.1 定義
- 1.2 區別
- 1.3 常見筆試題
- 2. 棧和堆
- 2.1 棧內存
- 2.2 堆內存
- 2.3 區別
1. 棧和隊列
1.1 定義
棧(Stack):是限定能在表的一端進行插入和刪除操作的線性表
隊列(Queue):是限定只能在表的一端進行插入和另一端刪除操作的線性表
1.2 區別
棧和隊列的區別:
(1)棧的插入和刪除操作都是在一端進行的,而隊列的操作卻是在兩端進行的;
(2)棧是先進后出,隊列是先進先出;
(3)棧只允許在表尾一端進行插入和刪除,隊列只允許在表尾一端進行插入,在表頭一端進行刪除。
1.3 常見筆試題
一個棧的入棧序列是abcde,則棧的不可能的輸出序列是( C )
A.edcba
B.decba
C.dceab
D.abcde
解析:堆棧講究先進后出,后進先出。
選項A:abcde先入棧,然后依次出棧,正好是edcba;
選項B:abcd先依次入棧,然后d出棧,e再入棧,e出棧,最后cba依次出棧;
選項C:錯誤;
選項D:a入棧,然后a出棧;b再入棧,b出棧……依此類推。
2. 棧和堆
2.1 棧內存
- 棧內存首先是一片內存區域,存儲的都是局部變量;
- 凡是定義在方法中的都是局部變量(方法外的是全局變量),for循環內部定義的也是局部變量,是先加載函數才能進行局部變量的定義,所以方法先進棧,然后再定義變量;
- 變量有自己的作用域,一旦離開作用域,變量就會被釋放;
- 棧內存的更新速度很快,因為局部變量的生命周期都很短。
2.2 堆內存
- 存儲的是數組和對象(其實數組就是對象),凡是new建立的都是在堆中;
- 堆中存放的都是實體(對象),實體用于封裝數據,而且是封裝多個(實體的多個屬性),如果一個數據消失,這個實體也沒有消失,還可以用,所以堆是不會隨時釋放的;
- 但是棧不一樣,棧里存放的都是單個變量,變量被釋放了,那就沒有了。堆里的實體雖然不會被釋放,但是會被當成垃圾,Java有垃圾回收機制不定時的收取。
2.3 區別
棧和堆的區別:
(1)棧內存存儲的是局部變量而堆內存存儲的是實體;
(2)棧內存的更新速度要快于堆內存,因為局部變量的生命周期很短;
(3)棧內存存放的變量生命周期一旦結束就會被釋放,而堆內存存放的實體會被垃圾回收機制不定時的回收。
總結
以上是生活随笔為你收集整理的JavaSE(二十一)——栈和队列、栈和堆的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaSE(二十)——面向对象的概念及
- 下一篇: JavaSE(二十二)——TCP协议的三