java的stack
『壹』 java棧stack和堆heap的工作原理,用途和區別
java堆和棧的區別
Java中內存分成兩種:一種是棧stack,一種是堆heap。
函數中的一些基本類型的變數(int, float)和對象的引用變數(reference)都在函數的棧中,馬克-to-win,(工作於編譯階段, 生成class文件之前)分配。存取速度快,稍遜於寄存器, 比堆快,
函數執行完後,Java會自動釋放掉為函數里變數開辟的棧內存空間,該內存空間可以立即被另作他用。
堆heap內存用來存放由new創建的對象和數組。堆內存,負責運行時(runtime, 執行生成的class文件時)數據,由JVM的自動管理。缺點是,存取速度較慢。
棧中的引用變數指向堆中的對象或數組。
棧
中有共享池的概念,比如下面例子中,sz="hello";在棧中創建一個String對象引用變數sz,然後看看棧中有沒有"hello",如果沒有,
則將"hello"存放進棧,並令sz指向」hello」,如果已經有」hello」 則直接令sz指向「hello」。對於int, float
類型的變數也是一樣的有這種共享池的概念,注意上述的工作是在compile(編譯)的階段完成的,而不是runtime運行時完成的。
對
於下面程序中:ss0 = new String( "hello"
);是用new()來新建對象的,存於堆中。每調用一次就會創建一個新的對象。當然從節省空間的角度來講,肯定不如str="hello",有童鞋一定
問,那要它有什麼用?當時設計編譯器時,為什麼要設計它?馬克-to-win,那我請問你,如果在你編程序時,你還不知道字元串內容怎麼辦?這時就用到
new String,所以,什麼都有什麼的用處。
public class Test
{
public static void main(String args[]) {
String str, str1, ss0, ss1, ss2, ss3, ss4;
str = "hello";
。。。。。。。。。。。。。。。。詳情網上找「馬克-to-win」,參考他的網站或他的網路空間:java第2章的內容
『貳』 JAVA中運用Stack類實現十進制轉換成八進制
直接在分割的時候就執行壓棧操作,出棧時移位相加,一個棧就能解決,不過毫無意義,在開發中並沒有什麼卵用。
有問題歡迎提問,滿意請採納,謝謝!
『叄』 java stack 遍歷 清空
for(Integer i:stack)遍歷棧時不會清空堆棧的數據,這里用的是Stack的父類Vector的方法。
要想遍歷並清空堆棧,可這樣寫:
while(stack.isEmpty())){
System.out.println(stack.pop());//將數據彈出堆棧
}
『肆』 java Stack 的size方法
因為你在列印方法中執行了s.pop(),所以size是在變化的,執行一次裡面的元素少一個,所以你用size()做判斷是錯誤的。
『伍』 Java如何實現堆棧
//這是JDK提供的棧
import java.util.Stack;
public class UsingStack {
public static void main(String[] args) {
//構造棧對象,使用類型限制,只能存儲Integer數據
Stack<Integer> s = new Stack<Integer>();
//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);
//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
//這是我寫的順序結構的棧
import java.util.EmptyStackException;
import java.util.Vector;
public class UsingStack{
public static void main(String[] args){
//構造棧對象,使用類型限制,只能存儲Integer數據
MyStack<Integer> s = new MyStack<Integer>();
//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);
//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
/**
* 棧類
* @author developer_05
* @param <T>
*/
class MyStack<T> extends Vector<T>{
/**
* 構造方法
*/
public MyStack(){
}
/**
* 入棧方法
* @param item 待入棧的元素
* @return 返回入棧的元素
*/
public T push(T item) {
addElement(item);
return item;
}
/**
* 出棧方法(同步處理)
* @return 返回出棧元素
*/
public synchronized T pop() {
T obj;
int len = size();
if (len == 0)
throw new EmptyStackException();
obj = elementAt(len - 1);
removeElementAt(len - 1);
return obj;
}
/**
* 判斷棧是否為空的方法
* @return 返回true(棧空)或false(棧非空)
*/
public boolean empty() {
return size() == 0;
}
private static final long serialVersionUID = 1L;
}
『陸』 java的棧stack 怎麼查看所有的元素
java.util.Stack 類的構造方法創建對象
這個類裡面有這個方法
public peek() 查看棧頂對象而不移除它。。
採納我 喲
『柒』 java中的「堆棧」是什麼意思
堆棧是計算機為程序分配的內存空間,用來存儲數據的。