Algorithms and Data Structures in Java