Stack是一种运算受限的线性表,其特点在于仅允许在表的一端(即表尾)进行插入和删除操作。这一端被称为栈顶,而相对的另一端则称为栈底。向一个栈插入新元素的操作称为进栈或入栈,它将新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素的操作称为出栈或退栈,它将栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。由于栈的插入和删除运算仅在栈顶一端进行,后进栈的元素必定先出栈,因此栈也被称为后进先出表(Last In First Out,简称LIFO)。
栈结构的示意图如下:
下列为Stack的一些常用方法:
push()方法通常称之为压栈,也就是将元素放入栈内使用也非常简单:
//实例化一个栈
Stack<Integer> stack = new Stack<>();
//进行压栈
stack.push(10);
通过这种方法我们就将10放入栈中同时也会有一个返回值可以用也可以不同 。
pop()将栈顶元素出栈并返回,这就非常容易理解了,简单理解就是返回栈顶元素并将栈顶元素移除栈顶位置。
System.out.println(stack.pop());
此时输出结果就是10,如果我们此时再一次进行pop()操作那么将会报错因为此时栈中已经没有元素了:
此时编译器会出现空栈错误。
peek()与pop()的区别就是peek()只是瞄一眼并不将栈顶元素移除,如果我们进行上述操作:
System.out.println(stack.peek());
System.out.println(stack.peek());
System.out.println(stack.peek());
输出结果都是10,因为在访问的时候我们并没有将栈顶元素进行移除,因此·我们可以无限次的访问栈顶元素(前提是栈顶得有元素)。
empty()就非常简单了判断栈是否为空,如果为空返回true反之返回false。
如果我们此时开始访问将会返回一个false因为此时栈内已经有一个元素10,因此不为空返回false。