底层有多种实现方式,只要可以满足栈的定义和接口
public interface Stack<E> {
int getSize();
boolean isEmpty();
void push(E e); //入栈
T pop(); //弹栈
T peek(); //查看栈顶元素
}
package stack;
import array.Array;
//基于动态数组的栈实现
public class ArrayStack<T> implements Stack<T> {
Array<T> array;
public ArrayStack(int capacity) {
array = new Array<>(capacity);
}
public ArrayStack() {
array = new Array<>();
}
@Override
public int getSize() {
return array.getSize();
}
@Override
public boolean isEmpty() {
return array.isFull();
}
public int getCapacity(){
return array.getCapacity();
}
@Override
public void push(T t) {
array.insertToLast(t);
}
@Override
public T pop() {
return array.removeLast();
}
@Override
public T peek() {
return array.getLast();
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Stack:[");
for(int i=0; i<array.getSize(); i++){
stringBuilder.append(array.getElement(i));
if(i!=array.getSize()-1){
stringBuilder.append(", ");
}
}
stringBuilder.append("] top");
return stringBuilder.toString();
}
}
public class Test {
public static void main(String[] args) {
ArrayStack<Integer> stack = new ArrayStack<>();
System.out.println("栈容量为:"+stack.getCapacity());
System.out.println("当前栈是否为空:"+stack.isEmpty());
stack.push(10);
stack.push(20);
stack.push(30);
stack.push(40);
stack.push(50);
System.out.println(stack);
System.out.println("当前栈是否为空:"+stack.isEmpty());
System.out.println("当前栈的大小为:"+stack.getSize());
System.out.println("栈顶元素为:"+stack.peek());;
stack.pop();
stack.pop();
System.out.println("弹栈后的栈为:"+stack);
}
}
java.util.Stack,继承了Vector(也是一个动态数组,与ArrayList不同)
public
class Stack<E> extends Vector<E> {
}
API接口
原文:https://www.cnblogs.com/sout-ch233/p/13051409.html