栈
1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
class Stackx{
public static void main(String[] args) {
Stackx x = new Stackx(10);
x.push(1);
x.push(4);
System.out.println(x.peek());
x.pop();
System.out.println(x.peek());
x.push(6);
System.out.println(x.peek());
System.out.println(x.isFull());
System.out.println(x.doRev("12345"));
}
private int maxSize;
private long[] stackArray;
private int top;
public Stackx(int size){
top = -1;
stackArray = new long[size];
maxSize = size;
}
public void push(long value){
stackArray[++top] = value;
}
public long pop(){
return stackArray[top--];
}
public long peek(){
return stackArray[top];
}
public boolean isFull(){
return (top == maxSize);
}
public int gettop(){
return top;
}
public String doRev(String value){
Stackx s = new Stackx(value.length());
String output = "";
char[] valueArray = value.toCharArray();
System.out.println(valueArray);
for(int i = 0; i < value.length(); i++){
s.push(Integer.parseInt(String.valueOf(valueArray[i])));
}
while(s.gettop() != -1){
output += s.pop();
}
return output;
}
public String toString(){
StringBuilder sb = new StringBuilder();
for(long v:stackArray){
sb.append(v);
sb.append(",");
}
return sb.toString();
}
}