package 栈与队列上;
public class MiniStack {
private int size; //size是栈顶指针
private Object[] array = new Object[4]; //Java不能初始化泛型数组,如果需要,则要使用Java反射实现
/**
* 判断数组是否为空
* @return
*/
public boolean isEmpty() {
return size == 0 ? true : false;
}
/**
* 获取栈的大小
* @return
*/
public int size() {
return size;
}
/**
* 数组扩容
*/
public void expandCapacity() {
Object[] newArray = new Object[size * 2]; //扩容为原数组的2倍
System.arraycopy(array, 0, newArray, 0, size); //数组复制
array = newArray; //指向新的数组,原来的数组被垃圾回收器回收掉
}
/**
* push操作
* @param t
*/
public void push(Object t) {
array[size] = t;
size++; //栈顶指针
if (size == array.length) {
expandCapacity();
}
}
/**
* 返回栈顶元素
* @return
*/
public Object peek() {
if (isEmpty()) {
return null;
} else {
return array[size - 1];
}
}
/**
* 弹栈操作
* @return
*/
public Object pop() {
if (isEmpty()) {
return null;
} else {
Object t = peek();
array[size - 1] = null; //防止内存泄露
size--;
return t;
}
}
public static void main(String[] args) {
MiniStack stack = new MiniStack();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println("stack is empty ? It`s " + stack.isEmpty());
System.out.println("stack`s size "+stack.size);
while (!stack.isEmpty()) {
System.out.println("pop " + stack.pop());
}
System.out.println("stack is empty ? It`s " + stack.isEmpty());
System.out.println("stack`s size "+stack.size);
}
}