Lecture 1: Data Definitions in Java

    Lecture 2: Data Definitions: Unions

    Lecture 3: Methods for simple classes

    Lecture 4: Methods for unions

    Lecture 5: Methods for self-referential lists

    Lecture 6: Accumulator methods

    Lecture 7: Accumulator methods, continued

    Lecture 8: Practice Design

    Lecture 9: Abstract classes and inheritance

    Lecture 10: Customizing constructors for correctness and convenience

    Lecture 11: Defining sameness for complex data, part 1

    Lecture 12: Defining sameness for complex data, part 2

    Lecture 13: Abstracting over behavior

    Lecture 14: Abstractions over more than one argument

    Lecture 15: Abstracting over types

    Lecture 16: Visitors

    Lecture 17: Mutation

    Lecture 18: Mutation inside structures

    Lecture 19: Mutation, aliasing and testing

    Lecture 20: Mutable data structures

    Lecture 21: ArrayLists

    Lecture 22: ArrayLists

    Lecture 23: For-each loops and Counted-for loops

    Lecture 24: While loops

    Lecture 25: Iterator and Iterable

    Lecture 26: Hashing and Equality

    Lecture 27: Introduction to Big-O Analysis

    Lecture 28: Quicksort and Mergesort

    Lecture 29: Priority Queues and Heapsort

    Lecture 30: Breadth-first search and Depth-first search on graphs

    Lecture 31: Dijkstra’s Algorithm for single-source shortest paths

    Lecture 32: Minimum Spanning Trees

    Lecture 33: Implementing Objects