не могу понять запись
Set<String> set = new HashSet<String>();
мы создаем переменную set типа Set<String>. потом создаем объект new HashSet<String>(); разве мы не должны писать
HashSet<String> set = new HashSet<String>();
объясните связь между Set<String> и HashSet<String>?