Lists Basic list operations List tradeoffs List design choices - Doubly vs. Singly linked - Header objects - Circular lists Trees Tree traversals Binary Search Trees Abstract Syntax Trees N-ary trees Recursion Basic principles Tracing recursive execution Writing recursive functions Induction Basic principles Strong vs. Weak induction Proving things about algorithms Grammars & Parsing Context free grammars Recursive descent parsers Tokenizers Subtyping Implementing Interfaces Extending classes Standard type hierarchy Casting and instanceof Inheritance Overriding vs. Shadowing Static vs. Dynamic dispatch abstract methods and classes Exceptions try/catch throw throws Standard Exception hierarchy Generics Using generics Generic classes Generic methods Wildcards Bounded wildcards GUI statics