package net.iyouqu.bruceretrofit.util.java;
import java.util.ArrayList;
/**
* Created by liq on 2017/2/25.
*/
public class CustomStack<E> {
//重载因子
private static final float LOAD_FACTOR = 0.75f;
//需要扩充容量时的大小
private int resizeCapacity;
private Object[] data = null;
//栈容量
private int capacity;
//栈顶
private int top;
public CustomStack(int initSize) {
if (initSize >= 0) {
this.capacity = initSize;
data = new Object[initSize];
top = 0;
this.resizeCapacity = (int) (capacity * LOAD_FACTOR);
} else {
throw new RuntimeException("初始化大小不能小于0:" + initSize);
}
}
private ArrayList elementData = new ArrayList();
public void push(E o){
checkStackCapacity();
data[top] = o;
top++;
}
public E pop(){
if(top<=0)
throw new RuntimeException("没有元素不能弹出");
E e = (E) data[top - 1];
data[top-1] = null;
--top;
return e;
}
public E peek(){
return (E) data[top - 1];
}
public boolean isEmpty(){
return top == 0;
}
public int size(){
return top;
}
private void checkStackCapacity() {
if (top == resizeCapacity) {
capacity = capacity * 2;
Object[] newData = new Object[capacity];
System.arraycopy(data, 0, newData, 0, top);
data = newData;
}
}
}