This schedule is subject to change. Any change will be announced in class and on the course web page.

Week Topic, Readings CloudCoder Exercises
Week 1 (May 18–22) Lecture 1: Introduction, Primitive Java, 1.1–1.6
Lecture 2: Objects/References, Constructors, JUnit, 2.1–2.3, 3.1–3.9
Lecture 3: Arrays, 2.4
Week 2 (May 25–29) Lecture 4: File I/O, Exceptions, 2.5–2.6
Lecture 5: Exceptions, 2.5
Lecture 6: GUIs
Week 3 (June 1–5) Lecture 7: Inheritance, 4.1–4.2
Lecture 8: ArrayList, Inheritance (continued), 4.3–4.4
Lecture 9: Type casts, instanceof, Object class, Interfaces
Exam 1 (Thursday, June 4th)
Week 4 (June 8–12) Lecture 10: Generic methods and classes, 4.5-4.7
Lecture 11: Generic methods, functors, 4.8
Week 5 (June 15–19) Lecture 12: Analysis of Algorithms, 5.1-5.3
Lecture 12a: Code Comments
Lecture 13: Big-O, 5.4-5.8
Week 6 (June 22–26) Lecture 14: Collections, Iterators, 6.1-6.3
Lecture 15: Generic Algorithms, 6.4, Lecture 16: Lists, 6.5
Week 7 (June 29–July 3) No class
Week 8 (July 6–10) Lecture 17: Parallel Programming with Threads
Exam 2 (Thursday, July 9th)
Week 9 (July 13–17) Lecture 18: Stacks and Queues, 6.6
Lecture 19: Sets and Maps, 6.7-6.8
Week 10 (July 20–24) Lecture 20: Recursion, 7.1, 7.3
Lecture 21: Proof by Induction, 7.2
Week 11 (July 27–July 31) Lecture 22: Memoization and Dynamic Programming, 7.6
Lecture 23: Insertion and Shell Sorts, 8.1-8.3
Week 12 (Aug 3–7) Lecture 24: Merge and Quick Sort, 8.5-8.6
Exam 3 (Thursday, Aug 6th)
Week 13 (Aug 10–14) Lecture 25: Singly and Doubly-Linked Lists, 17.1-17.3
Final Exam (Thursday, August 13th)