Почему Map не наследуется от коллекций
Что проверяют
Знаете ли вы устройство коллекций из стандартной библиотеки, поверх которых написан весь Android-код, и умеете ли объяснять решение через контракт интерфейса, а не фразой «так исторически сложилось».
Как отвечать
Collection<E> описывает набор одиночных элементов: add(E), contains(Object), iterator(), size(). Map<K,V> хранит пары, и ни один из этих методов на неё не переносится однозначно. Что должен принимать add у карты, что должен возвращать iterator, ключи или значения? Однозначного ответа нет, а наследование обязало бы реализовать все методы предка, то есть часть из них пришлось бы запрещать исключением. Дженерики добавляют ту же проблему с другой стороны: у коллекции один параметр типа, у карты два, общего супертипа им просто не выразить.
Вместо наследования карта отдаёт три представления: keySet() это Set<K>, values() это Collection<V>, entrySet() это Set из пар. Важно, что это не копии, а вид на ту же карту: удаление через представление меняет саму карту, а изменение карты видно в представлении.
В Kotlin развязка та же. Map<K,V> не наследует Collection<E> и не является Iterable, но keys, values и entries это коллекции, а привычный обход пары через цикл работает благодаря оператору-расширению.
Стоит назвать и android-специфику самому: ArrayMap реализует Map, а SparseArray и SimpleArrayMap нет, поэтому у них нет ни entrySet(), ни обхода циклом for each, зато нет и упаковки ключей в объекты.
Где спотыкаются
Отвечают, что карта не коллекция, потому что хранит пары, и замолкают. Это пересказ вопроса другими словами. Ждут рассуждение про контракт: наследник обязан выполнять все обещания предка, а карта их выполнить не может.
Считают keySet() и values() копиями. Отсюда сюрприз, что удаление ключа из представления выкидывает запись из карты, а попытка что-то туда добавить падает, потому что операция не поддерживается.
Перебирают карту через keySet() и вызов get() в цикле. Это два поиска на запись вместо одного, тогда как обход entrySet() даёт ключ и значение сразу. На горячем пути в мобильном приложении разница видна.