В большинстве случаев вам не нужно помещать null
в HashMap.Вы можете проверить, какие клавиши имеют значение, назначенное с помощью keySet()
, и рассматривать все остальное как null
(поскольку оно никогда не назначалось).
Однако ваш вопрос ко мне указывает на то, что вам необходимо различать три состояния: Пара ключ-значение, ключ, которому никогда не присваивалось значение, и ключи, которым явно присвоено значение null
.
Поскольку значение по умолчанию HashMap
не поддерживает это поведение,Вы могли бы реализовать свой собственный класс, который реализует интерфейс Map
.В основном это только HashMap
, с несколькими важными исключениями:
- Когда вы назначаете ключу значение
null
, вы помещаете ключ в Set
из «NullKeys»вместо HashMap
. - Когда вы получаете ключ, проверьте, находится ли он в «NullKey»
Set
.Если да, верните null
, в противном случае посмотрите на HashMap
.
Существуют некоторые особые случаи (перезапись существующего значения с помощью null
и т. Д.), Но это будет основной стратегией.
(Я не уверен, что этот класс полезен для других, кроме очень специализированных сценариев, но он будет соответствовать вашим требованиям.)