import java.util.*;

/**
 * A stack implemented using an ArrayList
 * 
 * @author dave
 * @date 2/22/2010
 *
 * @param <E>
 */
public class ArrayListStack<E> implements Stack<E>, Linear<E> {
	ArrayList<E> list = new ArrayList<E>();
	
	public boolean empty() {
		return list.size() == 0;
	}

	public E peek() {
		assert !empty();
		
		return list.get(list.size()-1);
	}

	public E pop() {
		assert !empty();
		
		E item = list.get(list.size()-1);
		list.remove(list.size()-1);
		return item;
	}

	public void push(E item) {
		list.add(item);		
	}
	
	// ---------------- Just added for compatibility with Linear
	public void add(E item) {
		push(item);
	}

	public E remove() {
		return pop();
	}
}
