import java.util.Arrays;
public class MyArrayStack<T> {
private T[] arrayStack = (T[]) new Object[1];
private int stackSize = 0; // 当前栈中已存的数据量
/**
* 构造函数,参数值为初始化数组的长度
* @param length
*/
public MyArrayStack(int length) {
arrayStack = (T[]) new Object[length];
}
/**
* 入栈一个元素
* 如果stackSize大于length的0.75,则扩大二倍,
* @param t
*/
public void push(T t){
if(stackSize > arrayStack.length * 0.75 - 1) {
T[] newArrayStack = (T[]) new Object[arrayStack.length * 2];
System.arraycopy(arrayStack, 0, newArrayStack, 0, arrayStack.length - 1);
arrayStack = newArrayStack;
}
arrayStack[stackSize++] = t;
}
/**
* 出栈一个元素
*/
public T pop(){
T t = arrayStack[--stackSize];
arrayStack[stackSize] = null;
return t;
}
/**
* 获取当前栈中已有的数据量
* @return
*/
public int size(){
return stackSize;
}
/**
* 当前栈是否为空
* @return
*/
public boolean isEmpty(){
return 0 == stackSize;
}
public void printStack(){
System.out.println(Arrays.toString(arrayStack));
}
}
class MyArrayStackTest{
public static void main(String[] args) {
MyArrayStack<String> myArrayStack = new MyArrayStack(10);
System.out.println(myArrayStack.isEmpty());
// 测入栈
myArrayStack.push("1");
myArrayStack.push("2");
myArrayStack.push("3");
myArrayStack.push("4");
myArrayStack.push("5");
myArrayStack.push("6");
myArrayStack.push("7");
myArrayStack.printStack();
// 测扩容
myArrayStack.push("8");
myArrayStack.printStack();
// 测出栈
myArrayStack.pop();
myArrayStack.printStack();
// 测是否为空
System.out.println(myArrayStack.isEmpty());
// 测大小
System.out.println(myArrayStack.size());
}
}
结果:
true
[1, 2, 3, 4, 5, 6, 7, null, null, null]
[1, 2, 3, 4, 5, 6, 7, 8, null, null, null, null, null, null, null, null, null, null, null, null]
[1, 2, 3, 4, 5, 6, 7, null, null, null, null, null, null, null, null, null, null, null, null, null]
false
7