Java实现一个栈(可以自动扩容)
先声明接口interface Stack<E>
/**
* @author yinglongwu
*/
//适用泛型
public interface Stack<E> {
int getSize();
boolean isEmpty();
void push(E e);//入栈
E pop();//出栈
E peek();//查看栈顶元素
}
class ArrayStack<E>
实现接口
这里是通过自定义的Array类里的方法来实现Stack接口,进而形成这个ArrayStack类
自定义的Array类:点我跳转
/**
* @author yinglongwu
*/
//这里通过自定义的Array类里的方法实现Stack接口,进而形成这个ArrayStack,
//并且也可以自动扩容
public class ArrayStack<E> implements Stack<E> {
//这个Array<E>是自己封装的,内容详见 https://blog.csdn.net/qq_43594119/article/details/105183123
Array<E> array;
//有参构造
public ArrayStack(int capacity) {
array = new Array<>(capacity);
}
//无参构造
public ArrayStack() {
array = new Array<>();//使用Array类里的无参构造
}
//获取栈的最大容量
public int getCapacity() {
return array.getCapacity();//调用的方法也是自己封装的Array类里的方法
}
//对接口中的方法进行重写
@Override
public int getSize() {
return array.getSize();
}
@Override
public boolean isEmpty() {
return array.isEmpty();
}
//入栈
@Override
public void push(E e) {
array.addLast(e);
}
//出栈
@Override
public E pop() {
return array.removeLast();
}
//查看栈顶元素
@Override
public E peek() {
return array.getLast();
}
//对toString方法进行重写,方便输出栈的基本信息
@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack: ");
res.append('[');
for (int i = 0; i < array.getSize(); i++) {
res.append(array.get(i));
if (i != array.getSize()-1) {
res.append(", ");
}
}
res.append("] top");//表明右侧是栈顶
return res.toString();
}
}
测试使用这个ArrayStack栈
/**
* @author yinglongwu
*/
public class Main {
public static void main(String[] args) {
//测试class ArrayStack
ArrayStack<Integer> stack = new ArrayStack<Integer>();//new ArrayStack<Integer>()里的Integer可写可不写
//包装类和其对应的基本数据类型可以自动转换
//将0到4入栈
for (int i = 0; i < 5; i++) {
stack.push(i);
System.out.println(stack);
}
//出一次栈
stack.pop();
System.out.println(stack);
}
}
输出结果