public class ArrayStack implements Stack { private Object[] items; private int size; public ArrayStack() { clear(); } public void clear() { items = new Object[1]; size = 0; } public boolean isEmpty() { return size == 0; } private void grow() { Object[] copy = new Object[items.length * 2]; for (int i = 0; i < size; i++) copy[i] = items[i]; items = copy; } public void push(Object x) { if (size >= items.length) grow(); items[size] = x; size++; } public Object pop() { if (isEmpty()) throw new java.util.EmptyStackException(); size--; Object x = items[size]; items[size] = null; return x; } public Object top() { if (isEmpty()) throw new java.util.EmptyStackException(); return items[size-1]; } }