This text incorporates the object-oriented design paradigm throughout using Java as the implementation language, while also providing the fundamental intuition and analysis of each structure studied. The authors seek to present a "learning system" book. The book is accompanied by a web site which provides students with applications of the Java language as well as Java applets, the complete source code developed for the book and suites of test data used for the programming assignments.