Chapter 1 Review of Java
1.1 Object-Oriented Programming
1.2 The Java Programming Language
1.3 Variables and Objects
1.4 Primitive Types
1.5 Flow Control
1.6 Classes
1.7 Modifiers
1.8 The String Class
1.9 The Math Class
Chapter 2 Review of Arrays
2.1 Properties of Arrays
2.2 Duplicating an Array
2.3 The Arrays Class
2.4 The Sequential Search Algorithm
2.5 The Binary Search Algorithm
2.6 The Vector Class
Chapter 3 Advanced Java
3.1 Inheritance
3.2 Polymorphism
3.3 Type Conversion
3.4 The Object Class
3.5 Abstract Classes
3.6 Interfaces
3.7 Packages
3.8 Exception Handling
Chapter 4 Recursion
4.1 The Basis and Recursive Parts of Recursion
4.2 Tracing a Recursive Call
4.3 The Recursive Binary Search Algorithm
4.4 Binomial Coefficients
4.5 The Euclidean Algorithm
4.6 Inductive Proof of Correctness
4.7 Complexity Analysis of Recursive Algorithms
4.8 Dynamic Programming
4.9 The Towers of Hanoi
4.10 Mutual Recursion
Chapter 5 Collections
5.1 The Java Collections Framework
5.2 The Collection Interface
5.3 The AbstractCollection Class
5.4 A Bag Class
5.5 The Iterator Interface
Chapter 6 Stacks
6.1 The Java Stack Class
6.2 Applications of Stacks
6.3 Removing Recursion
Chapter 7 Queues
7.1 A Framework for Queues
7.2 A Contiguous Implementation
7.3 A Linked Implementation
7.4 Simulation with Queues
Chapter 8 Lists
8.1 The java.util.List Interface
8.2 Implementations of the java.util.List Interface
8.3 The AbstractList and AbstractSequentialList Classes
8.4 List Iterators
8.5 The ArrayList Class
8.6 The LinkedList Class
8.7 Independent List Iterators
Chapter 9 Trees
9.1 Tree Definitions
9.2 Decision Trees and Transition Diagrams
9.3 Ordered Trees
9.4 Tree Traversal Algorithms for Ordered Trees
Chapter 10 Binary Trees
10.1 Definitions
10.2 Counting Binary Trees
10.3 Full Binary Trees
10.4 Identity, Equality, and Isomorphism
10.5 Complete Binary Trees
10.6 Binary Tree Traversal Algorithms
10.7 Expression Trees
10.8 A BinaryTree Class
10.9 Implementations of the Traversal Algorithms
10.10 Forests
Chapter 11 Search Trees
11.1 Multiway Search Trees
11.2 B-Trees
11.3 Binary Search Trees
11.4 Performance Characteristics of Binary Search Trees
11.5 AVL Trees
11.6 An AVLTree Class
Chapter 12 Heaps and Priority Queues
12.1 Heaps
12.2 The Natural Mapping
12.3 Insertion into a Heap
12.4 Removal from a Heap
12.5 A PriorityQueue Class
12.6 The Java Comparator Interface
12.7 A Direct Implementation
Chapter 13 Sorting
13.1 The Java Arrays.sort() Method
13.2 The Bubble Sort
13.3 The Selection Sort
13.4 The Insertion Sort
13.5 The Shell Sort
13.6 The Merge Sort
13.7 The Quick Sort
13.8 The Heap Sort
13.9 The Speed Limit for Comparison Sorts
13.10 The Radix Sort
13.11 The Bucket Sort
Chapter 14 Tables
14.1 The Java Map Interface
14.2 The HashMap Class
14.3 Java Hash Codes
14.4 Hash Tables
14.5 Hash Table Performance
14.6 Collision Resolution Algorithms
14.7 Separate Chaining
14.8 Applications
14.9 The TreeMap Class
Chapter 15 Sets
15.1 Mathematical Sets
15.2 The Java Set Interface
15.3 The Java AbstractSet Class
15.4 The Java HashSet Class
15.5 The Java TreeSet Class
Chapter 16 Graphs
16.1 Simple Graphs
16.2 Graph Terminology
16.3 Paths and Cycles
16.4 Isomorphic Graphs
16.5 The Adjacency Matrix for a Graph
16.6 The Incidence Matrix for a Graph
16.7 The Adjacency List for a Graph
16.8 Digraphs
16.9 Paths in a Digraph
16.10 Weighted Digraphs and Graphs
16.11 Euler and Hamiltonian Paths and Cycles
16.12 Dijkstra's Algorithm
16.13 Graph Traversal Algorithms
Appendix A Essential Mathematics
A.1 The Floor and Ceiling Function
A.2 Logarithms
A.3 Complexity Classes
A.4 The First Principle of Mathematical Induction
A.5 The Second Principle of Mathematical Induction
A.6 Geometric Series
A.7 Summation Formulas
A.8 Harmonic Numbers
A.9 Stirling's Formula
A.10 The Fibonacci Numbers
A.11 The Golden Mean
A.12 The Euclidean Algorithm
A.13 The Catalan Numbers
Appendix B From C++ to Java
Appendix C Java Development Environments
C.1 The Windows Command Prompt
C.2 Visual Cafe from Webgain
Appendix D References
Index