Имя переменной, в данном случае это экземпляр класса Cat, должен быть уникальным. Примерно так: Cat cat1 = new Cat("борис"); Cat cat2 = new Cat("гарфи"); cat1 cat2, это уникальные идентификаторы со ссылками на разные объекты. Однако я не понял что мы имеем в коллекции.
public static Map<String, Cat> addCatsToMap(String[] cats) {
    Map<String, Cat> map = new HashMap<>();
    for (String x : cats) {
        map.put(x, new Cat(x));
    }
    return map;
}
В цикле, первый аргумент это имя ключа, а второй, это сам объект, создаваемый через конструктор, но я не могу понять, какое имя переменной получает созданный объект? В коллекции мы имеем пары: Ключ: Конструктор в котором указано значение переменной экземпляра name Имя переменной объекта при создании борис // new Cat("борис") // ???? Получается, в памяти появился объект типа Cat cо значением локальной переменной экземпляра "борис", но какое имя переменной, которая хранит ссылку?