This is an absolutely outstanding book, but it depends on your intent. This is not a general purpose Java book. In fact, the Java aspect is almost incidental. This is a data structures and algorithms book. It's intent is to teach core computer science concepts that trace their roots back literally decades, and will hold until the day comes when someone figures out how to exceed the Turing model, which will change life as we know it so substantially that *all* your computer books will become instantly obsolete. In the mean time, if you want to learn Java per se, do not buy this book! If you want to understand the building blocks of computer science, definitely buy this book. It's ability to concisely address all the key concepts is amazing. I teach a computer science class on data structures and algorithms, and I evaluated several books other than this one. At first glance, I did not like this book because it was so easy to read and presented concepts so effectively that I thought it was too lightweight. But as I read it, I was amazed at how well it covered everything, and did it with brevity and clarity. It starts from basic sets and linked structures and makes it all the way through complex trees and graphs. Again, don't get it if just learning Java is your goal, that is definitely not its purpose, but if you want to understand the foundational programming tools of computer science, this book is great. (Note: this book has been superceded by "Java Foundations", also by Lewis, and also a nicely enhanced version of the same great content.)