import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; public class School { private final Map> database = new HashMap>(); public Map> db() { // Leaks internal storage to caller return database; } public void add(String student, int grade) { Set students = grade(grade); students.add(student); } public Set grade(int grade) { // Leaks internal storage to caller if (!database.containsKey(grade)) { database.put(grade, new TreeSet()); } return database.get(grade); } public Map> sort() { Map> sortedStudents = new HashMap>(); for (Integer grade : database.keySet()) { // Relies on using a TreeSet internally List sortedGrade = new ArrayList(database.get(grade)); sortedStudents.put(grade, sortedGrade); } return sortedStudents; } }