Java: From Control Structures through Data Structures