Ответ
Да, можно, но происходит автоматическая упаковка (autoboxing) примитива в соответствующий класс-обёртку. Сами примитивы (int, char и т.д.) не могут быть использованы напрямую, так как дженерики в Java (Map<K, V>) работают только с объектными типами.
Пример с HashMap:
Map<Integer, String> map = new HashMap<>();
int primitiveKey = 42;
map.put(primitiveKey, "Answer"); // Автоматическая упаковка int -> Integer
String value = map.get(42); // Автоматическая упаковка аргумента
Особенности для разных Map:
HashMap/LinkedHashMap: Работают с любыми ключами, включая упакованные примитивы. Важно, чтобы класс-обёртка правильно реализовывалhashCode()иequals()(чтоInteger,Longи др. делают).TreeMap/TreeSet: Требуют, чтобы ключи былиComparableили предоставлялсяComparator. Классы-обёртки (Integer,Double,Character) уже реализуютComparable.
Важное замечание: При активной работе с примитивами в качестве ключей для повышения производительности можно использовать специализированные реализации из сторонних библиотек (например, Int2ObjectMap из FastUtil или Koloboke), которые хранят ключи как примитивы, избегая накладных расходов на упаковку и объектные заголовки.