A primeira coisa que você precisa saber é que HashSet
age como a Set
, o que significa que você adiciona seu objeto diretamente ao HashSet
e não pode conter duplicatas. Você acabou de adicionar seu valor diretamente HashSet
.
No entanto, HashMap
é um Map
tipo. Isso significa que toda vez que você adiciona uma entrada, você adiciona um par de valor-chave.
Em HashMap
você pode ter valores duplicados, mas não chaves duplicadas. Na HashMap
nova entrada substituirá a antiga. A entrada mais recente será na HashMap
.
Entendendo o link entre o HashMap e o HashSet:
Lembre-se, HashMap
não pode ter chaves duplicadas. Nos bastidores HashSet
usa um HashMap
.
Quando você tenta adicionar qualquer objeto a HashSet
, essa entrada é realmente armazenada como uma chave no HashMap
- o mesmo HashMap
que é usado nos bastidores HashSet
. Como esse subjacente HashMap
precisa de um par de valor-chave, um valor fictício é gerado para nós.
Agora, quando você tentar inserir outro objeto duplicado no mesmo HashSet
, ele tentará novamente inseri-lo como uma chave na parte de HashMap
baixo. No entanto, HashMap
não suporta duplicatas. Conseqüentemente,HashSet
ainda resultará em ter apenas um valor desse tipo. Como uma observação lateral, para cada chave duplicada, já que o valor gerado para nossa entrada no HashSet é algum valor aleatório / fictício, a chave não é substituída. ele será ignorado porque remover a chave e adicionar novamente a mesma chave (o valor fictício é o mesmo) não faria nenhum sentido.
Resumo:
HashMap
permite duplicar values
, mas não keys
.
HashSet
não pode conter duplicatas.
Para saber se a adição de um objeto foi concluída com êxito ou não, você pode verificar o boolean
valor retornado quando ligar .add()
e ver se ele retorna true
ou false
. Se retornou true
, foi inserido.
HashMap
para ver se okey
já existe antes de chamarput
o suportemap
?