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