| Preface | p. xiv |
| Important Features of Java | p. 1 |
| Classes | p. 2 |
| Summary | p. 33 |
| Exercises | p. 33 |
| Developing and Using a Sequence Class | p. 37 |
| Interfaces and Collection Classes | p. 39 |
| Abstract Methods and Abstract Classes | p. 40 |
| Interfaces | p. 41 |
| Arrays | p. 45 |
| Collection Classes | p. 46 |
| Storage Structures for Collection Classes | p. 48 |
| Summary | p. 59 |
| Exercises | p. 60 |
| Expanding the LinkedCollection Class | p. 62 |
| Introduction to Software Engineering | p. 65 |
| The Software Development Life Cycle | p. 66 |
| Problem Analysis | p. 66 |
| Program Design | p. 69 |
| Program Implementation | p. 73 |
| Program Maintenance | p. 86 |
| Summary | p. 87 |
| Exercises | p. 88 |
| Further Expansion of the LinkedCollection Class | p. 91 |
| Recursion | p. 93 |
| Introduction | p. 94 |
| Factorials | p. 94 |
| Decimal to Binary | p. 98 |
| Towers of Hanoi | p. 102 |
| Backtracking | p. 111 |
| Binary Search | p. 120 |
| Indirect Recursion | p. 131 |
| The Cost of Recursion | p. 132 |
| Summary | p. 133 |
| Exercises | p. 134 |
| Iterative Version of Towers of Hanoi | p. 142 |
| Eight Queens | p. 144 |
| A Knight's Tour | p. 146 |
| Array Lists | p. 149 |
| The List Interface | p. 150 |
| The ArrayList Class | p. 151 |
| The ArrayList Implementation | p. 162 |
| Application: High-Precision Arithmetic | p. 169 |
| The Vector Class | p. 175 |
| Summary | p. 175 |
| Exercises | p. 175 |
| Extending the VeryLongInt Class | p. 179 |
| The Deque Class | p. 180 |
| Linked Lists | p. 185 |
| The LinkedList Class | p. 186 |
| Application: A Line Editor | p. 211 |
| Summary | p. 223 |
| Exercises | p. 224 |
| Extending the Line Editor | p. 226 |
| Alternative Design and Implementation of the LinkedList Class | p. 231 |
| Queues and Stacks | p. 233 |
| Queues | p. 234 |
| Computer Simulation | p. 242 |
| Application: A Simulated Car Wash | p. 244 |
| Stacks | p. 251 |
| Application: How Compilers Implement Recursion | p. 254 |
| Application: Converting From Infix to Postfix | p. 257 |
| Summary | p. 267 |
| Exercises | p. 267 |
| Extending Speedo's Car Wash | p. 270 |
| Run-Time Evaluation of a Condition | p. 272 |
| An Iterative Version of Maze-Search | p. 276 |
| Binary Trees and Binary Search Trees | p. 277 |
| Definition and Properties of Binary Trees | p. 278 |
| Binary Search Trees | p. 294 |
| Summary | p. 316 |
| Exercises | p. 317 |
| An Alternative Design and Implementation of the Binary-Search-Tree Data Structure | p. 321 |
| Balanced Binary Search Trees | p. 323 |
| A Problem with Binary Search Trees | p. 324 |
| Rotations | p. 324 |
| AVL Trees | p. 329 |
| Red-Black Trees | p. 348 |
| Summary | p. 355 |
| Exercises | p. 356 |
| Defining the remove Method in the AVLTree Class | p. 360 |
| Tree Maps and Tree Sets | p. 361 |
| The TreeMap Class | p. 362 |
| Application: TreeMap Objects: A Simple Thesaurus | p. 389 |
| The TreeSet Class | p. 395 |
| Application: A Simple Spell-Checker | p. 399 |
| Summary | p. 405 |
| Exercises | p. 405 |
| Enhancing the SpellChecker Project | p. 408 |
| Determining Word Frequencies | p. 410 |
| Building a Concordance | p. 412 |
| Priority Queues | p. 415 |
| Introduction | p. 416 |
| Definition of the PriorityQueue Interface | p. 417 |
| Implementations of the PriorityQueue Interface | p. 417 |
| Application: Huffman Codes | p. 432 |
| Summary | p. 446 |
| Exercises | p. 447 |
| Decoding a Huffman-Encoded Message | p. 450 |
| Sorting | p. 453 |
| Introduction | p. 454 |
| Insertion Sort | p. 454 |
| How Fast Can We Sort? | p. 457 |
| Fast Sorts | p. 459 |
| Summary | p. 482 |
| Exercises | p. 482 |
| File Sorting | p. 491 |
| Searching and the Hash Classes | p. 495 |
| A Framework to Analyze Searching | p. 496 |
| Review of Searching | p. 496 |
| The HashMap Class | p. 499 |
| The HashSet Class | p. 517 |
| Open-Address Hashing | p. 517 |
| Summary | p. 533 |
| Exercises | p. 534 |
| Comparing Chained Hashing and Open-Address Hashing | p. 538 |
| Graphs, Trees, and Networks | p. 539 |
| Undirected Graphs | p. 540 |
| Directed Graphs | p. 543 |
| Trees | p. 544 |
| Networks | p. 545 |
| Graph Algorithms | p. 547 |
| Developing a Network Class | p. 563 |
| Backtracking through a Network | p. 582 |
| Summary | p. 584 |
| Exercises | p. 585 |
| Completing the Implementation of the Network Class under the Adjacency-Matrix Design | p. 589 |
| A Network Search | p. 590 |
| Mathematical Background | p. 593 |
| Introduction | p. 593 |
| Functions and Sequences | p. 593 |
| Sums and Products | p. 594 |
| Logarithms | p. 595 |
| Mathematical Induction | p. 597 |
| Exercises | p. 605 |
| The GUI and GUIListener Classes | p. 607 |
| Introduction | p. 607 |
| Threads | p. 608 |
| Implementing the Process Interface | p. 610 |
| The GUI Class | p. 611 |
| The GUIListener Class | p. 615 |
| Putting It All Together | p. 617 |
| The Java Collections Framework | p. 619 |
| Introduction | p. 619 |
| The Collection Interface | p. 619 |
| The List Interface | p. 621 |
| The Listlterator Interface | p. 623 |
| The Set Interface | p. 625 |
| The Map Interface | p. 627 |
| The ArrayList Class | p. 630 |
| The LinkedList Class | p. 643 |
| The TreeSet Class | p. 662 |
| The TreeMap Class | p. 674 |
| The HashSet Class | p. 689 |
| The HashMap Class | p. 698 |
| Bibliography | p. 709 |
| Index | p. 711 |
| Table of Contents provided by Syndetics. All Rights Reserved. |