stack是什么
Stack
类代表最先进先出(LIFO)堆栈的对象。 它扩展了类别Vector与五个操作,允许一个向量被视为堆栈。 设置在通常的push和pop操作,以及作为一种方法来peek在堆栈,以测试堆栈是否为empty的方法,以及向search在栈中的项目的方法在顶部项目和发现多远它是从顶部。
当首次创建堆栈时,它不包含任何项目。
Deque接口及其实现提供了更完整和一致的LIFO堆栈操作集,这些接口应优先于此类。 例如:
Deque<Integer> stack = new ArrayDeque<Integer>();
package stack;
import java.util.EmptyStackException;
import java.util.Stack;
public class Test {
static void showpush(Stack<Integer> st, int a) {
st.push(new Integer(a));
System.out.println("push(" + a + " )");
/**
* 这里不能使用“push(a)”因为这样会把a直接输入出去,此时的a就变成了一个字母,而不是那个参数
* 这里的+ 是字符串 拼接的意思 ,把变量a中存的字符串拼接起来,这里只有a自己。
*/
System.out.println("stack: " + st);
}
static void showpop(Stack<Integer> st) {
System.out.print("pop -> ");
Integer a = (Integer) st.pop();
System.out.println(a);
System.out.println("stack: " + st);
}
public static void main(String args[]) {
Stack<Integer> st = new Stack<Integer>();
System.out.println("stack: " + st);
showpush(st, 42);
showpush(st, 66);
showpush(st, 99);
showpop(st);
showpop(st);
showpop(st);
try {
showpop(st);
} catch (EmptyStackException e) {
System.out.println("empty stack");
}
}
}
扩展
package stack;
import java.util.Stack;
public class Test1 {
public void test(int x) {
Stack<Integer> s1 = new Stack<Integer>();
Stack<Integer> s2 = new Stack<Integer>();
s1.push(x);
s2.push(x);
int p1 = s1.peek();
int p2 = s2.peek();
System.out.println(p1==p2);
//比较的是这个值是否相等
System.out.println(s1.peek() == s2.peek());
//比较的是栈地址是否相等
}
public static void main(String[] args) {
Test1 t = new Test1();
t.test(127);
t.test(128);
}
}
原因:
在Javah中,使用这个stack这个类,里面的push函数,如果存入的值的范围为(-128,127)之内的话,无论是==,还是比较他们的peek值,都是true,如果不在这个范围的话,只有==是true,而他们的peek的==,是false。