Io ti consiglio il Thinking in Java, comunque cerca nel forum che dovrebbero esserci già molte discussioni in merito.