import java.util.EmptyStackException; public class ArrayStack implements Stack { final static int DEFAULT_CAPACITY = 16; private Object [] stack; private int top = -1; private int capacity; public ArrayStack( int cap ) { capacity = cap; stack = new Object[ cap ]; } public ArrayStack() { this( DEFAULT_CAPACITY ); } public void push(Object o) { if ( top == capacity-1 ) grow(); stack[ ++top ] = o; } public Object pop() throws EmptyStackException { if ( isEmpty() ) throw new EmptyStackException(); else { Object ret = stack[ top ]; stack[ top-- ] = null; // para recogida de basura return ret; } } public boolean isEmpty() { return ( top < 0 ); } public void clear() { for ( int i = 0; i < top; i++ ) stack[ i ] = null; // para recogida de basura top = -1; } private void grow() { Object [] old = stack; int oldCapacity = capacity; capacity *= 2; stack = new Object[ capacity ]; System.arraycopy( old, 0, stack, 0, oldCapacity); } }