Fundamentals of OOP and Data Structures in Java: Hashing and Sets