package com.coding.basic;
import java.util.Arrays;
import java.util.EmptyStackException;
/**
* @Description 简单实现stack
*/
public class SimpleStack {
private Object[] elementData = new Object[10];
private int size;
/**
* 往栈顶添加新的元素
* @param o 要添加的元素
*/
public void push(Object o){
//扩容
if(elementData.length < size +1){
grow(size+1);
}
elementData[size++] = o;
}
/**
* 数组扩容
* @param capacity 数组实际长度
*/
private void grow(int capacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity *2;//扩容2倍
if(newCapacity < capacity){
newCapacity = capacity;
}
elementData = Arrays.copyOf(elementData, newCapacity);
}
/**
* 移除并返回栈顶元素
* @return Object 返回该移除的元素
*/
public Object pop(){
Object o = peek();
removeElement(size-1);
return o;
}
/**
* 移除栈顶元素
* @param length 栈的长度
*/
private void removeElement(int length) {
elementData = Arrays.copyOf(elementData, length);
size --;
}
/**
* 返回栈顶元素
* @return Object 栈顶元素
*/
public Object peek(){
if(size == 0){
throw new EmptyStackException();
}
return elementData[size-1];
}
/**
* 查询并返回栈的长度
* @return int 栈的长度
*/
public int size(){
return this.size;
}
/**
* 判断是否为空栈
* @return boolean
*/
public boolean isEmpty(){
return size==0;
}
}