Revisiting algorithms and data structures using Java