前言:
堆栈堆栈,什么是栈?栈是为执行线程留出的内存空间,当函数被调用时,栈顶为局部变量和一些bookkeeping数据预留块。当函数执行完毕的时候,这个块就没用了。可能在下次函数调用的时候再被使用。栈通常是先进后出,即最先进去的最后出去,如何理解。玩过小时候的玩具枪吗?装黄黄的子弹的那个,是不是要压一颗进去,最先压进去的在最底下。然后开枪发射的时候是最后进的那颗发射出去的。这就是和我们的栈相似——先进后出。
原理解析:
图解: 有三个后来的程序员要填前人的坑!
这时程序员1 , 2不畏艰难跳进了这个坑里去打补丁:
1号程序员进去后,无法自拔。这时2号进去了,压着1号,1号想走也走不了了。
3号程序员也进来了,发现这是个巨坑,果断跑路,幸好陷入的不深,所有跑出去了。。接着2号跑路,1号也删库跑路!
这就是先进后出,随便玩玩哈,黑黑自己~~~~
看完上面的搞笑图,谦虚点,咱们撸代码:
package com.ern.demo;
public class MyStack {
Object stackArray[];
int maxSize;
int top;
/**
* 初始化时,初始化数组长度以及栈顶
* @param maxSize
*/
public MyStack(int maxSize) {
this.maxSize = maxSize;
stackArray = new Object[maxSize];
top = -1;
}
/**
* 往栈里丢数据
* @param data
*/
public void push(Object data) {
stackArray[++top] = data;
}
/**
* 弹出数据并查看
* @param data
*/
public Object pop() {
return stackArray[top--];
}
/**
* 查看栈是否为空
*
* @return
*/
public boolean isEmpty() {
return top == -1;
}
/**
* 查看栈是不是满了
*
* @return
*/
public boolean isFull() {
return top == (maxSize - 1);
}
/**
* 查看栈顶数据
*/
public Object peek() {
return stackArray[top];
}
public static void main(String[] args) {
String a ="abcdefghijklmm123";
MyStack myStack= new MyStack(a.length());
for (int i = 0; i < a.length(); i++) {
if (!myStack.isFull()) {
myStack.push(a.charAt(i));
}
}
while (!myStack.isEmpty()) {
System.out.print(myStack.pop()+" ");
}
}
}
总结:
感觉栈来说,好像真的没太大的难度,很好理解,但是真正用在项目里却真的比较难了。但是,不管什么框架,项目,都离不开栈,如果要深入了解栈,我们可以去了解jvm虚拟机。了解java的内存模型,相信会给我们很大的好处!谢谢大家~祝大家学习进步,步步高升。
程序人生,与君共勉!