# Schedule

This page is a schedule of topics and readings. Lecture notes will posted sometime following each lecture, but please remember that the notes are a supplement to, not a replacement for, attending class and taking your own notes.

Assignments and due dates are listed separately.

## Introduction and Java review

### January 24 Tue

Topics:

- course overview
- computers and memory
- variables and values
- primitive types
- arrays
- scope
- the (call) stack

Suggested reading:

- Sestoft, pages 1–8
- Downey and Mayfield, chapters 1, 2, 4
- Niemeyer and Leuck, chapters 1 and 4 (focus on subheadings related to the topics above)
- the A Closer Look at the “Hello World!” Application lesson
- the Language Basics lesson

### January 26 Thu

Topics:

- expressions, statements, and blocks
- control flow constructs in Java

Suggested reading:

- Sestoft, chapters 11 and 12
- Downey and Mayfield, chapters 5 (first half), 6, 7
- Niemeyer and Leuck, chapter 4 (focus on subheadings related to the topics above)
- the Language Basics lesson

### January 31 Tue

03: Java review: Classes, Objects, and Methods

Topics:

- methods
- classes and objects
- aliasing

Suggested reading:

- Sestoft, chapter 9
- Downey and Mayfield, chapters 4, 6, 10, 11
- Niemeyer and Leuck, chapter 4 and 5
- the Classes and Objects lesson

### February 02 Tue

04: Java review: Namespaces, Packages and the CLASSPATH; JUnit

Topics:

- namespaces
- packages
- the CLASSPATH / build path

Suggested reading:

- Sestoft, chapters 16 and 17
- Niemeyer and Leuck, chapter 6
- the Packages lesson

## Lists

### February 07 Tue, 14 Tue

05: Arrays and Lists

06: Linked Lists

Topics:

- containers: arrays and lists

Suggested reading:

- the Arrays trail
- the List interface
- Downey and Mayfield, chapters 8, 12
- Niemeyer and Leuck, chapter 4 (section on arrays), 8 (first few sections)
- Sestoft, chapter 22 section 2

### February 16 Thu

Topics:

- generics and Java containers
- working with lists

Suggested Reading:

- the Generics lesson
- the List interface
- the List
docs - Java doc for wrapper types, such as
`java.lang.Integer`

- Niemeyer and Leuck, chapter 8 (first few sections)
- Sestoft, chapter 21

### Feburary 21 Tue

08: Quiz Review and Supporting Lists

Topics:

- quiz review
- implementing important support methods (
`toString`

,`equals`

,`compareTo`

) - comparators

Suggested Reading:

- Java doc for
`Object`

,`Comparable`

,`Comparator`

- Sestoft, chapter 22.9, 22.10
- How to Write an Equality Method in Java (Only read this if you want to start going down the rabbit hole. Odersky is a developer of Scala, a language you’ll use in COMPSCI 220.)

## Sets

### February 23 Thu

Topics:

- introduction to sets
- the
`Set`

abstract data type `HashSet`

and hash tables

Suggested Reading:

- https://en.wikipedia.org/wiki/Set_(mathematics)
- https://en.wikipedia.org/wiki/Venn_diagram
- Sestoft, chapter 22.3
- http://docs.oracle.com/javase/8//docs/api/java/util/Set.html
- http://docs.oracle.com/javase/8//docs/api/java/util/HashSet.html
`hashCode`

### February 28 Tue

Topics:

- more on
`HashSet`

s - trees (and an introduction to graphs)
- binary search trees
`TreeSet`

Suggested Reading:

- https://en.wikipedia.org/wiki/Binary_search_tree
- https://en.wikipedia.org/wiki/Tree_(graph_theory)
- https://en.wikipedia.org/wiki/Graph_(discrete_mathematics)
- https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html
- Sestoft, chapter 22.9

## Maps

### March 02 Thu

Topics:

- Santa’s little helper
- the Map ADT
- Java’s
`Map`

interface (and`HashMap`

implementation)

Suggested Reading:

- https://en.wikipedia.org/wiki/Associative_array
- http://docs.oracle.com/javase/tutorial/collections/interfaces/map.html
- https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
- https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
- Sestoft, chapter 22.5

### March 07 Tue

Topics:

- Another worked
`Map`

example: anagrams `BufferedReader`

for reading lines from a file

Suggested Reading:

- https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html
- https://docs.oracle.com/javase/tutorial/collections/interfaces/map.html (Multimaps are described about 2/3 down this page)

## Algorithms

### March 09 Thu

13: Introduction to Running Times

Topics:

- Mid-course review
- Introduction to running time and related concepts
- constant vs linear time

### March 21 Tue

Topics:

- linear vs quadratic time
- early escape from loops
- binary search and log_2 time

Suggested Reading:

- Downey and Mayfield, chapter 12.8–12.10
- https://en.wikipedia.org/wiki/Analysis_of_algorithms
- https://en.wikipedia.org/wiki/Time_complexity
- https://en.wikipedia.org/wiki/Binary_search_algorithm

## Graphs and Search

### March 28 Tue

Topics:

- more on runtime
- sorting
- selection sort, bubble sort, insertion sort

Suggested Reading:

- https://en.wikipedia.org/wiki/Sorting_algorithm
- https://www.toptal.com/developers/sorting-algorithms

### March 30 Thu

Topics:

- graphs and graph terminology
- introduction to graph search

Suggested Reading:

- https://en.wikipedia.org/wiki/Binary_search_tree
- https://en.wikipedia.org/wiki/Tree_(graph_theory)
- https://en.wikipedia.org/wiki/Graph_(discrete_mathematics)

### April 04 Tue

Topics:

- finding paths in graphs
- BFS, DFS, and the search tree
- “greedy” search and priority queues
- A*

Suggested Reading:

- Open Data Structures, Java Edition, chapter 12
- https://en.wikipedia.org/wiki/Breadth-first_search
- https://en.wikipedia.org/wiki/Depth-first_search
- Grids and Graphs
- Introduction to A* (also includes information on BFS and greedy BFS)
- http://docs.oracle.com/javase/8/docs/api/java/util/Queue.html
- http://docs.oracle.com/javase/8/docs/api/java/util/Stack.html
- http://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html

### April 06 Thu

Topics:

- graph implementations

Suggested Reading:

### April 11 Tue

Topics:

- linear (and not-so-linear) data structures, general and specialized (lists, stacks, queues, deques, priority queues)
- applications to search

## Implementation Notes

### April 13 Thu

Topics:

- implementing an array-based stack
- implementing a linked-list-based stack

Suggested Reading:

### April 20 Thu

Topics:

- implementing a linked-list-based queue
- implementing an array-based queue

## Intro to Recursion

### April 25 Tue

Topics:

- recursion, baby steps only!

## Wrap-up

### April 27 Thu

23: Building Tic-Tac-Toe (this was an interactive lecture, no notes)

Topics:

- how to think about building Java programs

### May 02 Tue

Topics:

- course review
- wrap-up
- questions and answers
- enthusiastic applause is mandatory for passing
- as is filling out your SRTI
- just kidding about the SRTI thing
- I can’t believe you actually read all of this, you maniac!

## Final Exam

Our exam is scheduled for:

05/10/2017

Wednesday

3:30–5:30pm

Integrated Learning Center, room S140

Please note (from the Academic Rules and Regulations):

…it is University policy not to require students to take more than two final examinations in one day of the final examination period. If any student is scheduled to take three examinations on the same day, the faculty member running the chronologically middle examination is required to offer a make-up examination if the student notifies the instructor of the conflict at least two weeks prior to the time the examination is scheduled. The student must provide proof of the conflict. This may be obtained from the Registrar’s Office, 213 Whitmore.