В задаче есть HashMap grades, методы которого (keySet и values) возвращают коллекции типа Set и типа Collection, однако если в задаче явно создать коллекции Set<String> keys = grades.keySet(); Collection<Double> value = grades.values(); Компилятор выдаст ошибку т.к. ни Set ни Collection не подключены. Тогда как в задаче в цикле мы возвращаем Set и Collection через методы HashMap? И как тогда компилятор понимает как работать с этими значениями? for (String key: grades.keySet()) { Integer value = grades.get(key); System.out.println(value); } Простите если слишком сложно объяснил, старался как мог