Обобщения и коллекции

Карта раздела для повторения:

Map<String, List<Long>> idsByType = new HashMap<>();
idsByType.computeIfAbsent("new", ignored -> new ArrayList<>())
        .add(42L);

Generic-проверка работает при компиляции; в runtime большинство параметров стёрто. Выбор коллекции определяется контрактом: порядок, уникальность, доступ по ключу, сложность операции и конкурентность.

Быстрая проверка

Является ли List<Integer> подтипом List<Number>? Нет, generics инвариантны.

От чего зависит корректность ключа HashMap? Стабильный согласованный контракт equals/hashCode.

Когда нужен ? extends T? Когда структура в основном производит T; добавлять произвольный T в неё нельзя.