Abstract Data Type (ADT): A specification of a collection of data and the operations that can be performed on it. Describes what a collection does, not how it does it. interface implementation List list = new ArrayList(); "You should favor the use of interfaces over classes to refer to objects. If appropriate interface types exist, then parameters, return values, variables and fields should all be declared using interface types. The only time you really need to refer to an object's class is when you're creating it with a constructor." -Joshua Bloch Stack: LIFO (last in, first out) data structure example: cafeteria trays Stack s = new Stack() - makes an empty stack public void push(E value) - adds to the top of the stack public E pop() - removes from the top of the stack public boolean isEmpty() - true if empty, false otherwise public int size() - number of elements in the stack Queue: FIFO (first in, last out) data structure example: checkout lines Queue q = new LinkedList() - makes an empty queue public void add(E value) - adds to the back of the queue public E remove() - removes from the front of the queue public boolean isEmpty() - true if empty, false otherwise public int size() - number of elements in the queue