For any programmer and hacker the deep knowledge of data structures and basic algorithms is a priceless skill. Understanding algorithms as sorting, binary search, geometry, regular expression and graph processing and datastructures as lists, queues, maps and tree is essential for designing and implementing fast and robust programs.
Don’t be fooled, just using the given datastructures and algorithm which you find either in Java directly or within the web will not have the same effect as really learning and understanding them.
For example can you re-implement a java.lang.List via Arrays? How about Map? How would you implement a thread pool? What is the most effective way to sort an array or searching through a given datastructure?
How about applying your algorithm skills to new problems?
Solving algorithm problems is a little bit like solving riddles therefore it is also fun. 😉
Here you find a selection of web resources I like. I will extend this section if I stumble upon new resources.
Princeton University Introduction to Programming has a nice website (and a nice corresponding book) with lots of examples and problems to be solved.