Acredito que é, pelo menos em parte, permitir que você combine containsKey
e faça get
uma única ligação. Se o mapa puder conter nulos, não há como saber se get
está retornando um nulo porque não havia chave para esse valor ou apenas porque o valor era nulo.
Por que isso é um problema? Porque não há maneira segura de fazer isso sozinho. Pegue o seguinte código:
if (m.containsKey(k)) {
return m.get(k);
} else {
throw new KeyNotPresentException();
}
Como m
é um mapa simultâneo, a chave k pode ser excluída entre as chamadas containsKey
e get
, fazendo com que esse trecho retorne um nulo que nunca estava na tabela, e não o desejado KeyNotPresentException
.
Normalmente você resolveria isso sincronizando, mas com um mapa simultâneo que, obviamente, não funcionaria. Daí a assinatura paraget
teve que mudar, e a única maneira de fazer isso de maneira compatível com versões anteriores era impedir o usuário inserir valores nulos em primeiro lugar e continuar usando-o como um espaço reservado para "chave não encontrada".