By Carl Burch, a professor for Hendrix College in Conway, Arkansas, USA. To contact the author, send e-mail to cburch at cburch dot c o m. [Other books by Carl Burch]

Table of Contents

1. Introduction
   1.1. Procedure and data
   1.2. The ArrayList data structure

2. Recursion and lists
   2.1. Recursive procedure
   2.2. Recursive data

3. Reasoning about correctness
   3.1. Invariants
   3.2. Data structure invariants

4. Reasoning about efficiency
   4.1. Analyzing efficiency
   4.2. Case study: Sorting an array
   4.3. Case study: Counting primes
   4.4. Memory usage analysis

5. Trees
   5.1. Fundamentals
   5.2. Binary search trees
   5.3. Red-black trees

6. Hashing
   6.1. The Map ADT
   6.2. Hash tables
   6.3. Hash functions

7. Stacks and queues
   7.1. Stacks
   7.2. Queues

8. Priority queues
   8.1. Simple priority queue implementations
   8.2. Heaps
   8.3. Application: Sorting
   8.4. Application: Shortest path

9. Java review
   9.1. Objects and classes
   9.2. Inheritance
   9.3. Abstract classes and interfaces