Я считаю , что это, по крайней мере частично, позволяют объединять containsKeyи getв один вызов. Если карта может содержать значения NULL, невозможно определить, getвозвращает ли значение NULL, потому что не было ключа для этого значения или просто потому, что значение было нулевым.
Почему это проблема? Потому что нет безопасного способа сделать это самостоятельно. Возьмите следующий код:
if (m.containsKey(k)) {
return m.get(k);
} else {
throw new KeyNotPresentException();
}
Поскольку mэто одновременное отображение, ключ к может быть удален между containsKeyи getвызовов, в результате чего этот фрагмент кода , чтобы возвратить нуль , что никогда не был в таблице, а не желаемое KeyNotPresentException.
Обычно вы решаете это путем синхронизации, но с параллельной картой это, конечно, не сработает. Следовательно, подпись для getдолжна была быть изменена, и единственный способ сделать это обратно совместимым способом - не допустить, чтобы пользователь вставлял нулевые значения в первую очередь, и продолжать использовать это как заполнитель для «ключ не найден».