La première chose que vous devez savoir est qu'il HashSetagit comme un Set, ce qui signifie que vous ajoutez votre objet directement à HashSetet qu'il ne peut pas contenir de doublons. Vous ajoutez simplement votre valeur directement dans HashSet.
Cependant, HashMapc'est un Maptype. Cela signifie que chaque fois que vous ajoutez une entrée, vous ajoutez une paire clé-valeur.
Dans HashMapvous pouvez avoir des valeurs en double, mais pas des clés en double. Dans HashMapla nouvelle entrée remplacera l'ancienne. L'entrée la plus récente sera dans le HashMap.
Comprendre le lien entre HashMap et HashSet:
Rappelez-vous, HashMapne peut pas avoir de clés en double. Derrière la scène HashSetutilise un fichier HashMap.
Lorsque vous essayez d'ajouter un objet dans un HashSet, cette entrée est en fait stockée en tant que clé dans le HashMap- le même HashMapqui est utilisé derrière la scène de HashSet. Étant donné que ce sous-jacent a HashMapbesoin d'une paire clé-valeur, une valeur fictive est générée pour nous.
Maintenant, lorsque vous essayez d'insérer un autre objet dupliqué dans le même HashSet , il tentera à nouveau de l'insérer en tant que clé dans le HashMapcouché en dessous. Cependant, HashMapne prend pas en charge les doublons. Par conséquent, HashSetil en résultera toujours une seule valeur de ce type. En remarque, pour chaque clé dupliquée, puisque la valeur générée pour notre entrée dans HashSet est une valeur aléatoire / factice, la clé n'est pas du tout remplacée. il sera ignoré car la suppression de la clé et l'ajout de la même clé (la valeur fictive est la même) n'aurait aucun sens.
Résumé:
HashMapautorise la duplication values, mais paskeys .
HashSetne peut pas contenir de doublons.
Pour savoir si l'ajout d'un objet est terminé avec succès ou non, vous pouvez vérifier la booleanvaleur renvoyée lorsque vous appelez .add() et voir si elle renvoie trueou false. S'il est retourné true, il a été inséré.
HashMappour voir s'ilkeyexiste déjà avant de faire appelputau supportmap?