A primeira coisa que você precisa saber é que HashSetage como a Set, o que significa que você adiciona seu objeto diretamente ao HashSete não pode conter duplicatas. Você acabou de adicionar seu valor diretamente HashSet.
No entanto, HashMapé um Maptipo. Isso significa que toda vez que você adiciona uma entrada, você adiciona um par de valor-chave.
Em HashMapvocê pode ter valores duplicados, mas não chaves duplicadas. Na HashMapnova entrada substituirá a antiga. A entrada mais recente será na HashMap.
Entendendo o link entre o HashMap e o HashSet:
Lembre-se, HashMapnão pode ter chaves duplicadas. Nos bastidores HashSetusa um HashMap.
Quando você tenta adicionar qualquer objeto a HashSet, essa entrada é realmente armazenada como uma chave no HashMap- o mesmo HashMapque é usado nos bastidores HashSet. Como esse subjacente HashMapprecisa 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 HashMapbaixo. No entanto, HashMapnã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:
HashMappermite duplicar values, mas não keys.
HashSetnã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 booleanvalor retornado quando ligar .add() e ver se ele retorna trueou false. Se retornou true, foi inserido.
HashMappara ver se okeyjá existe antes de chamarputo suportemap?