一些自己理解的概念
(1)內存:內存是計算機重要的部件之一,任何程序都需要在內存中運行,是與cpu和外部存儲設備數據溝通的橋梁。在計算機運行的過程中,cpu會把內存中的數據進行運算,當運行結束后,cpu會把迅速按結果暫時輸出到內存。所以內存也決定着計算機的穩定運行。
(2)數據結構:數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。(百度)
(3)常用的數據結構:數組、棧、隊列、堆、鏈表、樹、圖、散列表等。
(4)堆:可以看作是一個完全二叉樹(若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。)堆要在程序運行時動態分配內存,存取速度較慢。
String str1=
"abc"
;
String str2=
"abc"
;
下面用過數組來模擬下(完全二叉樹)
(5)棧:棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。(百度)
棧是后進先出
(6)隊列:隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
隊列先進先出
(7)內存中的堆內存和占內存(切記不是數據結構中的堆和棧)
堆內存棧內存空間分配
堆內存棧內存緩存方式
堆內存棧內存申請效率的比較
棧:由系統自動分配,速度較快。但程序員是無法控制的。
堆:是由new分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便。
堆內存棧內存生成時間的比較
棧:在編譯時確定的,不是在運行時.
堆:在運行時確定的,不是在編譯時.
堆內存棧內存存儲java數據類型的比較
棧:int, short, long, byte, float, double, boolean, char等基本類型 和對象的引用(比如 Car car =new Car()中Car car為對象的引用 ,而 new Car()是實際對象,存在於堆中)。
堆:包裝類和真實的對象(String 類型也存在於堆內存)
以上是本人對堆,棧,隊列的一些淺薄理解,如果有錯誤,歡迎大家在留言指正,相互學習,共同進步!