Почему если считать количество совпадающих имен с помощью HashSet, но работает c ArrayList? С использованием HashSet - одинаковые имена стираются (хотя не допустимы только одинаковые фамилии - ключи. В этом случае программа бы не компилировалась).
package com.javarush.task.task08.task0815;

import java.util.*;

/*
Перепись населения
*/

public class Solution {
    public static HashMap<String, String> createMap() {
    HashMap <String, String> fio = new HashMap<>();

            fio.put("q", "z");
            fio.put("w", "z");
            fio.put("e", "c");
            fio.put("r", "v");
            fio.put("t", "b");
            fio.put("y", "n");
            fio.put("u", "m");
            fio.put("i", "a");
            fio.put("o", "s");
            fio.put("p", "d");
//                System.out.println(fio.values());
        return fio;
    }

    public static int getCountTheSameFirstName(HashMap<String, String> map, String name) {
    int f = 0;
    ArrayList<String> str = new ArrayList<String>(map.values());    //напишите тут ваш код
//    System.out.println(str);
    for (String s : str) if (name.equals(s)) f+=1;
//    System.out.println(str);
    return f;
    }

    public static int getCountTheSameLastName(HashMap<String, String> map, String lastName) {
    int f = 0;
    HashSet<String> str = new HashSet<String>(map.keySet());    //напишите тут ваш код
    for (String s : str) if (lastName.equals(s)) f+=1;
//System.out.println(str);
    return f;        //напишите тут ваш код

    }

    public static void main(String[] args) {
//System.out.println(getCountTheSameFirstName(createMap(), "z"));
//System.out.println(getCountTheSameLastName(createMap(), "p"));
    }
}