Отличная книга по анализу сложности, включая свойства популярных и не очень популярных структур данных, - Введение в алгоритмы, второе издание , также называемое CLRS. Широко считается библией алгоритмов и их анализа.
Для чего-то более ориентированного на Java, мой вводный курс по Java для студентов использовал эту книгу , и я нашел ее адекватной.
Для умственных упражнений вы можете ознакомиться с практикой. Попробуйте Project Euler , TopCoder или google "проблема практики acm" . Это, пожалуй, то, что даст вам наиболее ощутимые преимущества в повседневном кодировании. Большинство из них будут принимать и оценивать решения Java (и C / C ++), поэтому вы все настроены на язык.