入栈和出栈规律
1.由来
jvm中堆主要是用来存对象的,比如Object obj= new Object(),obj就是存在jvm的堆中的,栈则是用来存成员属性的,每一个线程都有一个独立的栈,前面的obj同样也会在栈中保存一个,但是保存的不是对象,而是obj在堆中的内存地址。当堆中的对象没有栈中的指针指向它时,就会被GC垃圾回收装置回收,栈的存取速度大于堆,小于寄存器,但是必须指定大小和生命周期。
2.入栈出栈规则
先进后出,不一定要全部入栈之后再出栈,没入栈完也可以先出栈
3.任何出栈元素后面的元素必须满足两条规则
1.在原序列(也就是入栈序列)中顺序比出栈元素小的,必须是逆序
2.在原序列(也就是入栈序列)中顺序比出栈元素大的,顺序无所谓
3.出栈元素表示的是出栈后面的所有元素
比如入栈的是12345,有下面两种情况:
a. 1 5 4 3 2 这个先看第一个元素1,1后面的元素每一个都比这个大,所以无所谓什么顺序,再看第二个元素5,5后面的元素都比这个数小,所以都必须遵循逆序,而432遵循逆序,所以没问题,情况成立。
b. 4 3 5 1 2 这个先看第一个元素4,4后面比它小的是312,而这个12明显不按逆序,也就是倒序排列,所以是有问题的 。以后碰到这个出栈顺序的面试题时,就可以分分钟选对了。
世间种种的诱惑,不惊不扰我清梦