package edu.hawaii.ics.yucheng; import java.util.ArrayList; import java.util.NoSuchElementException; /** * A generic stack class. * * @param <T> The parameterized type. */ class Stack<T> { /** The array list implementing the stack. */ private final ArrayList<T> myStack = new ArrayList<T>(); /** * Clears the stack. */ public void clear() { myStack.clear(); } /** * Returns true if the stack is empty. * * @return True if the stack is empty. */ public boolean isEmpty() { return myStack.isEmpty(); } /** * Pops a value off the stack. * * @return The value popped off the stack. */ public T pop() { if (myStack.isEmpty()) throw new NoSuchElementException(); final T item = myStack.get(myStack.size() - 1); myStack.remove(myStack.size() - 1); return item; } /** * Pushes a value onto the stack. * * @param item The item. */ public void push(final T item) { if (item == null) throw new NullPointerException("item"); myStack.add(item); } /** * The size of the stack. * * @return The size of the stack. */ public int size() { return myStack.size(); } /** * Fills an array with the values from the stack. * * @param items The items from the stack. */ public void toArray(final T[] items) { if (items == null) throw new NullPointerException("items"); myStack.toArray(items); } /** * Returns the string representation of the class data. */ @Override public String toString() { final StringBuilder builder = new StringBuilder(); for (int i = 0; i < size(); i++) builder.append("[" + i + "] = " + myStack.get(i) + "\n"); return builder.toString(); } }