Data Structures, Algorithms, and Applications in Java