Давно мучал вопрос, как объявлять/ в чем разница объявления переменной:
HashMap<String, Integer> map = new HashMap<>();
или
Map<String, Integer> map = new HashMap<>();
Аналогично и для других коллекций.. При решении данной задачи как раз напоролся что при первой проверке валидатор не пропустил - "В методе main объяви переменную коллекции HashMap и сразу проинициализируй ee". У меня как раз переменная объявлена была как во втором случае, исправив Map на HashMap сразу успешная проверка. Из лекций: Map<K,V> это интерфейс, HashMap<K,V> это реализация данного интерфейса... Ну ок, только все равно не понятно. Если смотреть документацию public class HashMap<K,V> extends AbstractMap<K,V>, и уже public abstract class AbstractMap<K,V> implements Map<K,V>. Не очень понятно зачем так сложно, но верю, что так было удобнее нужно, не суть. В любом случае если смотреть на левую часть объявления переменной, как я понимаю, разница типа ссылки будет лишь в том, что в Map<K,V> можно класть любую "Map", а в HashMap<K,V> только HashMap + лишняя строка импорта? Где такое можно применять? Есть ли другие различия и чем руководствоваться в выборе объявления переменной?