This book is written for practitioners of software development and for students of computer science who are interested in using the Java language to construct data structures. The book assumes general knowledge of computer programming but no experience of Java programming or object modeling for the readers. It intro duces the Java language and object model by going through examples of data modeling. The book emphasizes programming skills for developing various types of data structure and fundamental techniques for complexity analysis. The program ming skills are necessary for software development. The analysis techniques are needed to ensure performance of programs. The author has been responsible for teaching a data structure course for years. The book carries out his expectations for proficiency in both programming and complexity analysis from students. Several features of the book distinguish it from other books on data struc tures. A challenge for the book is relating the complexity analysis to the Java Virtual Machine, which isolates Java programmers from platform issues. The book devotes a chapter to discuss the structure of Java class files and the Java Virtual Machine. The book presents the problem of maximum flow and imple ments algorithms in Java to evaluate maximum flow for networks. It introduces persistent data structures, which may be included by some practitioners in their projects.