public class Stack implements Cloneable { private Object [] array; private int capacity; private int size; public Stack() { array = new Object[10]; capacity = 10; size = 0; } public Stack(int capacity) { this.capacity = capacity/10*10 + 10; array = new Object[this.capacity]; size = 0; } public Object push(Object item) { Object temp [] = null; if(size == capacity) { capacity += 10; temp = new Object[capacity]; for(int i=0; i<size; i++) temp[i] = array[i]; array = temp; } array[size++] = item; return array[size-1]; } public Object pop() throws EmptyStackException { if(size == 0) throw new EmptyStackException(); return array[--size]; } public Object peek() throws EmptyStackException { if(size == 0) throw new EmptyStackException(); return array[size-1]; } public boolean empty() { return size == 0; } public int size() { return size; } public Object clone() throws CloneNotSupportedException { Stack result = (Stack)super.clone(); result.array = array.clone(); return result; } }