本文目錄一覽:
java里Stack類怎麼用啊?
如下示例代碼
//Create the Stack instance and add a couple of elements to it
Stack stack = new Stack();
String s1 = “element 1”;
String s2 = “element 2”;
stack.push(s1);
stack.push(s2);
現在棧中有兩個元素,棧頂應該是element 2,我們可以通過peek方法看棧頂的元素:
System.out.println(stack.peek());
輸出:
element 2
要看element 1的位置需要使用search方法:
//Find position of a certain element
int pos = stack.search(“element 1”);
System.out.println(pos);
上面代碼將輸出:
2
要移除棧頂的元素應該用pop()方法:
System.out.println(stack.pop());
System.out.println(stack.pop());
輸出:
element 2
element 1
在上一步中棧中的兩個元素都被pop了,現在我們看下empty()方法是否返回true
System.out.println(stack.empty());
輸出:
true
java堆棧是什麼意思?
簡單的說:Java把內存劃分成兩種:一種是棧內存,一種是堆內存。\x0d\x0a \x0d\x0a在函數中定義的一些基本類型的變量和對象的引用變量都在函數的棧內存中分配。當在一段代碼塊定義一個變量時,Java就在棧中為這個變量分配內存空間,當超過變量的作用域後,Java會自動釋放掉為該變量所分配的內存空間,該內存空間可以立即被另作他用。\x0d\x0a \x0d\x0a堆內存用來存放由new創建的對象和數組。在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。在堆中產生了一個數組或對象後,還可以在棧中定義一個特殊的變量,讓棧中這個變量的取值等於數組或對象在堆內存中的首地址,棧中的這個變量就成了數組或對象的引用變量。引用變量就相當於是為數組或對象起的一個名稱,以後就可以在程序中使用棧中的引用變量來訪問堆中的數組或對象
stack在java的哪個類中
java.util.Stack 在 jdk java.util 包裡面, 也是 java 集合框架的重要組成部分
Stack是一個後進先出(last in first out,LIFO)的堆棧,在Vector類的基礎上擴展5個方法而來
E push(E item) 把項壓入堆棧頂部。
E pop() 移除堆棧頂部的對象,並作為此函數的值返回該對象。
E peek() 查看堆棧頂部的對象,但不從堆棧中移除它。
boolean empty() 測試堆棧是否為空。
int search(Object o) 返回對象在堆棧中的位置,以 1 為基數。
java中堆和堆棧有什麼區別
java中堆(heap)和堆棧(stack)有什麼區別 stack 和 heep 都是內存的一部分
stack 空間小,速度比較快, 用來放對象的引用
heep 大,一般所有創建的對象都放在這裡。
棧(stack):是一個先進後出的數據結構,通常用於保存方法(函數)中的參數,局部變量.
在java中,所有基本類型和引用類型都在棧中存儲.棧中數據的生存空間一般在當前scopes內(就是由{…}括起來的區域).
堆(heap):是一個可動態申請的內存空間(其記錄空閑內存空間的鏈表由操作系統維護),C中的malloc語句所產生的內存空間就在堆中.
在java中,所有使用new xxx()構造出來的對象都在堆中存儲,當垃圾回收器檢測到某對象未被引用,則自動銷毀該對象.所以,理論上說java中對象的生存空間是沒有限制的,只要有引用類型指向它,則它就可以在任意地方被使用.
1. 棧(stack)與堆(heap)都是Java用來在Ram中存放數據的地方。與C++不同,Java自動管理棧和堆,程序員不能直接地設置棧或堆。
2. 棧的優勢是,存取速度比堆要快,僅次於直接位於CPU中的寄存器。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。另外,棧數據可以共享,詳見第3點。堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由於要在運行時動態分配內存,存取速度較慢。
3. Java中的數據類型有兩種。
一種是基本類型(primitive types), 共有8種,即int, short, long, byte, float, double, boolean, char(注意,並沒有string的基本類型)。 這種類型的定義是通過諸如int a = 3; long b = 255L;的形式來定義的,稱為自動變量。值得注意的是,自動變量存的是字面值,不是類的實例,即不是類的引用,這裡並沒有類的存在。如int a = 3; 這裡的a是一個指向int類型的引用,指向3這個字面值。這些字面值的數據,由於大小可知,生存期可知(這些字面值固定定義在某個程序塊裡面,程序塊退出後,字段值就消失了),出於追求速度的原因,就存在於棧中。
另外,棧有一個很重要的特殊性,就是存在棧中的數據可以共享。假設我們同時定義:
int a = 3;
int b = 3;
編譯器先處理int a = 3;首先它會在棧中創建一個變量為a的引用,然後查找有沒有字面值為3的地址,沒找到,就開闢一個存放3這個字面值的地址,然後將a指向3的地址。接着處理int b = 3;在創建完b的引用變量後,由於在棧中已經有3這個字面值,便將b直接指向3的地址。
這樣,就出現了a與b同時均指向3的情況。特別注意的是,這種字面值的引用與類對象的引用不同。
假定兩個類對象的引用同時指向一個對象,如果一個對象引用變量修改了這個對象的內部狀態,那麼另一個對象引用變量也即刻反映出這個變化。
相反,通過字面值的引用來修改其值,不會導致另一個指向此字面值的引用的值也跟着改變的情況。 如上例,我們定義完a與b的值後,再令a=4;那麼,b不會等於4,還是等於3。在編譯器內部,遇到a=4;時,它就會重新搜索棧中是否有4的字面值,如果沒有,重新開闢地址存放4的值;如果已經有了,則直接將a指向這個地址。因此a值的改變不會影響到b的值。
另一種是包裝類數據,如Integer, String, Double等將相應的基本數據類型包裝起來的類。這些類數據全部存在於堆中,Java用new()語句來顯示地告訴編譯器,在運行時才根據需要動態創建,因此比較靈活,但缺點是要佔用更多的時間。
4.String是一個特殊的包裝類數據。即可以用String str = new String(“abc”);的形式來創建,也可以用String str = “abc”;的形式來創建(作為對比,在JDK 5.0之前,你從未見過Integer i = 3;的表達式,因為類與字面值是不能通用的,除了String。而在JDK 5.0中,這種表達式是可以的!因為編譯器在後台進行Integer i = new Integer(3)的轉換!)。
前者是規範的類的創建過程,即在Java中,一切都是對象,而對象是類的實例,全部通過new()的形式來創建。Java中的有些類,如DateFormat類,可以通過該類的getInstance()方法來返回一個新創建的類,似乎違反了此原則。其實不然。該類運用了單例模式來返回類的實例,只不過這個實例是在該類內部通過new()來創建的,而getInstance()向外部隱藏了此細節。那為什麼在String str = “abc”;中,並沒有通過new()來創建實例,是不是違反了上述原則?其實沒有。
java里的stack作用是什麼?
stack是java里的一個集合類,用於模擬一個堆棧,存放的信息是後進的元素先出
原創文章,作者:CWQE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/132532.html