- Introduction
- Data types, arithmetic, type-casting
- Classes, objects, lists, maps
- Procedural and object-oriented programs
- Method dispatch (overloading and overriding)
- A class design process
- Interfaces (part 1)
- Interfaces (part 2)
- Interfaces (part 3)
- Abstract classes
- Inheritance and equality
- Hashcode
- Comparables and comparators
- Comparators, lambdas, and method references
- Lambdas and functional interfaces
- Streams
- Binary trees (OpenDSA Chapter ⇗)
- Graph traversals — Depth-first search and breadth-first search (OpenDSA Chapter ⇗)
Many of the code examples in these notes originated from Julie Workman, Paul Hatalsky, Aaron Keen, and Zoë Wood.