
Personally if I had to get back into Java today I would start by exploring Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick & Kevin Wayne. The 2nd Edition has just been published (early April 2017) - but take in account that I am suggesting this basing myself exclusively on the reputation of the authors, and I haven't read it.
Introduction to Programming in Java by J. N. Patterson Hume and Christine Stephenson, page 392
Object-oriented Programming with Java by Barry J. Holmes and Daniel T. Joyce, page 544
Understanding object-oriented programming with Java by Timothy Budd, page 304
Teach yourself Java by Joseph O'Neil, page 184
Java in a Nutshell by Benjamin J. Evans, page 128
Java for Students by Douglas Bell and Mike Parr, page 490
Data structures and problem solving using Java by Mark Allen Weis, page 84
See here for a good article that goes over the downsides of this approach, and how it hurts both readability and performance: https://www.computerenhance.com/p/clean-code-horrible-perfor...
Providing small, challenging problems is a very valuable resource. I'm currently reading An Introduction to Programming in Java (as preparation for the Princeton Algorithms course on Coursera). While the book may not be the best Java book, each section has 40+ programming exercises. Sometimes the exercises are boring, but I do most of them anyway because they are in themselves a learning exercise.