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
Lecture 34: Implementing Objects
Lecture 35: Dynamic Programming
Lecture 36