Ответ
Да, HashMap имеет следующую политику работы с null:
- Ключ (
key): Разрешен одинnull-ключ. Попытка добавить второйnull-ключ перезапишет значение, связанное с первым. - Значение (
value): Разрешено неограниченное количествоnull-значений для любых ключей (включаяnull-ключ).
Пример:
HashMap<String, String> map = new HashMap<>();
map.put(null, "Value for null key"); // Допустимо
map.put("key1", null); // Допустимо
map.put(null, "Overwritten value"); // Перезаписывает предыдущее значение для null-ключа
System.out.println(map.get(null)); // Выведет: "Overwritten value"
System.out.println(map.get("key1")); // Выведет: null
Важные исключения:
Hashtable— не разрешаетnullни в качестве ключа, ни в качестве значения (бросаетNullPointerException).ConcurrentHashMap— не разрешаетnullни в качестве ключа, ни в качестве значения. Это решение связано с неоднозначностью семантикиget(key)при отсутствии ключа и наличииnull-значения в конкурентной среде.
Почему это важно? Выбор структуры данных должен учитывать необходимость хранения null, особенно в многопоточных приложениях.