Core J2EE Patterns by Deepak Alur, John Crupi and Dan Malks is a real good one. Not sure if it's "the best", but it offers excellent explanations and examples of patterns and how they can be used in your application.
It's written for J2EE in particular but you can use the patterns in any Java based application.
GOF's "Design Patterns: Elements of Reusable Object-Oriented Software".
It introduces the concept, definition, and advantages of Design Patterns. Translation into Java is quite simple.
A companion book, IMHO, is Fowler's "refactorings", which I find worth more for its design justifications than for the description of refactoring step (mostly automated now in decent IDEs).
Now if you want to learn Java best practices, and Java coding idioms, I would suggest Josh Bloch's "Effective Java".