This book focuses on traditional CS2 data structures topics, while developing object-oriented programs. The software life cycle is emphasized throughout, with numerous case studies of varying size and complexity. The first half of the book covers program design with classes, inheritance, polymorphism, recursion, and complexity analysis. The second half of the book covers the standard abstract data types (ADTs) -- stack, queue, list, tree, set, table, and graph -- including discussions of different implementations, applications, and the complexity of each ADT. Wherever possible, the book uses the abstract data types in the Java 2 Collections Framework. A final chapter on multithreading and synchronization provides a transition to follow-on courses in computer science. The book provides two unique add-on software packages that enable students to build easy graphical user interfaces, and extend the Java 2 Collections Framework to include all the relevant abstract data types. Any CS2/Java book must deal with this Java 2 Collections Framework to be fully functional and up-to-date, and this new text from Lambert and Osborne does just that.