Algorithms and Data structures in Java