Dipende quali sono le tue lacune...
Io sto studiando da poco Java e vengo dal C/C++, e nonostante conoscessi già un linguaggio di programmazione ho dovuto praticamente ripartire un po' da zero, poichè SECONDO ME sviluppare in Java è una cosa diversa da farlo in C/C++. Naturalmente concetti come le variabili, i tipi primitivi, le strutture condizionali/iteritive, le strutture di dati, ecc. sono identiche basta apprendere la nuova sintassi, però credo che per il resto ci voglia un attento studio.
Naturalmente ribadisco che questo è il mio punto di vista, quindi perfettamente opinabile...
Tuttavia venendo a qualche titolo io mi sto trovando particolarmente bene con il Thinking in Java 4 Edition... è in inglese però credo esista una versione tradotta in italiano.
Comunque se cerchi nel forum ce ne sono moltissime discussioni dove vengono consigliati libri...