public class ArrayStack implements Stack { private Object[] data; private int size; public ArrayStack(int capacity) { data = new Object[capacity]; } public boolean isEmpty(){ return (size==0); } public Object peek(){ if (size==0) throw new IllegalStateException("stack is empty"); return data[size-1]; } public Object pop(){ if (size==0) throw new IllegalStateException("stack is empty"); Object object = data[--size]; data[size] = null; return object; } public void push(Object object){ if (size == data.length) resize(); data[size++] = object; } public int size(){ return size; } private void resize(){ Object[] temp=data; data = new Object[2 * temp.length]; System.arraycopy(temp,0,data,0,size); } public void reverse(){ if (size==0) throw new IllegalStateException("stack is empty"); System.arraycopy(data, 1, data, 0, --size); }}