package effectivejava.creatinganddestoyingobjects;

import java.util.EmptyStackException;

/**
* Eliminate obsolete references
*
*
*/
public class Item5 {
    private Object[] elements;
    private int size = 0;
   
    public Item5(int initialCapacity) {
        this.elements = new Object[initialCapacity];
    }

    public void push(Object e) {
        ensureCapacity();
        elements[size++] = e;
    }

    public Object pop() {
        if (size==0)
            throw new EmptyStackException();
        Object result = elements[--size];
        elements[size] = null; // Eliminate obsolete reference
        return result;
    }

    /**
    * Ensure space for at least one more element, roughly
    * doubling the capacity each time the array needs to grow.
    */
    private void ensureCapacity() {
        if (elements.length == size) {
            Object[] oldElements = elements;
            elements = new Object[2 * elements.length + 1];
            System.arraycopy(oldElements, 0, elements, 0, size);
        }
    }

    public static void main(String[] args) {
        Item5 s = new Item5(0);
        for (int i=0; i<args.length; i++)
            s.push(args[i]);
            for (int i=0; i<args.length; i++)
                System.out.println(s.pop());
    }

}

Hosted by www.Geocities.ws

1