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中的“堆栈”是什么意思
堆栈是计算机为程序分配的内存空间,用来存储数据的。