Hormis le fait que cela HashSet
n'autorise pas les valeurs en double, quelle est la différence entre HashMap
et HashSet
?
Je veux dire en termes de mise en œuvre? C'est un peu vague car les deux utilisent des tables de hachage pour stocker des valeurs.
java
collections
hashmap
hashset
SpikETidE
la source
la source
Réponses:
Ce sont des constructions entièrement différentes. A
HashMap
est une implémentation deMap
. Une carte mappe les clés aux valeurs. La recherche de clé s'effectue à l'aide du hachage.D'autre part, a
HashSet
est une implémentation deSet
. UNE ensemble est conçu pour correspondre au modèle mathématique d'un ensemble. AHashSet
utilise aHashMap
pour soutenir son implémentation, comme vous l'avez noté. Cependant, il implémente une interface entièrement différente.Lorsque vous recherchez ce qui conviendra le mieux
Collection
à vos besoins, ce didacticiel est un bon point de départ. Si vous voulez vraiment savoir ce qui se passe, il y a aussi un livre pour ça .la source
HashSet est un ensemble , par exemple {1,2,3,4,5}
HashMap est une carte clé -> valeur (clé à valeur), par exemple {a -> 1, b -> 2, c -> 2, d -> 1}
Notez dans mon exemple ci-dessus que dans le HashMap, il ne doit pas y avoir de clés en double, mais il peut avoir des valeurs en double.
Dans le HashSet, il ne doit y avoir aucun élément en double.
la source
HashSet
HashSet n'est pas synchronisé, ce qui signifie qu'il ne convient pas aux opérations thread-safe tant qu'il n'est pas synchronisé explicitement. [Similarité]
HashMap
HashMap n'est pas synchronisé, ce qui signifie qu'il ne convient pas aux opérations thread-safe tant qu'il n'est pas synchronisé explicitement. [Similarité]
Veuillez consulter cet article pour obtenir plus d'informations.
la source
C'est vraiment dommage que leurs deux noms commencent par Hash . C'est la partie la moins importante d'entre eux. Les parties importantes viennent après le Hash - l' ensemble et la carte , comme d'autres l'ont souligné. Ce qu'ils sont, respectivement, sont un ensemble - une collection non ordonnée - et une carte - une collection avec un accès par clé. Ils sont implémentés avec des hachages - c'est de là que viennent les noms - mais leur essence est cachée derrière cette partie de leurs noms.
Ne soyez pas confus par leurs noms; ce sont des choses profondément différentes.
la source
Les
Hashset
implémente en interneHashMap
. Si vous voyez l' implémentation interne, les valeurs insérées dans HashSet sont stockées sous forme de clés dans HashMap et la valeur est un objet factice de la classe Object.La différence entre HashMap et HashSet est: -
HashMap
contient des paires clé / valeur et chaque valeur est accessible par clé alors que HashSet doit être réitéré à chaque fois car il n'y a pas de méthode get.HashMap
implémente l'interface Map et autorise une valeur nulle en tant que clé et plusieurs valeurs nulles en tant que valeurs.LorsqueHashSet
implémente l'interface Set, n'autorise qu'une seule valeur nulle et aucune valeur dupliquée. car HashSet implémente HashMap en interne).HashSet
etHashMap
ne conserve pas l'ordre d'insertion lors de l'itération.la source
HashSet nous permet de stocker des objets dans l'ensemble alors que HashMap nous permet de stocker des objets sur la base de la clé et de la valeur. Chaque objet ou objet stocké aura la clé.
la source
Comme son nom l'indique, un HashMap est une Map associative (mappage d'une clé à une valeur), un HashSet n'est qu'un Set .
la source
Différences entre HashSet et HashMap en Java
1) première et la plus importante différence entre HashMap et HashSet est que HashMap est une implémentation de l'interface Map tandis que HashSet est une implémentation de l'interface Set, ce qui signifie que HashMap est une structure de données basée sur des valeurs clés et HashSet garantit l'unicité en n'autorisant pas les doublons. reality HashSet est un wrapper autour de HashMap en Java, si vous regardez le code de la méthode add (E e) de HashSet.java, vous verrez le code suivant:
où sa mise Object dans la carte comme clé et valeur est un objet final PRESENT qui est factice.
2) La deuxième différence entre HashMap et HashSet est que nous utilisons la méthode add () pour placer des éléments dans Set mais nous utilisons la méthode put () pour insérer la clé et la valeur dans HashMap en Java.
3) HashSet autorise une seule clé nulle, mais HashMap peut autoriser une clé nulle + plusieurs valeurs nulles.
Tout est sur la différence entre HashSet et HashMap en Java. En résumé, HashSet et HashMap sont deux types différents de Collection, l'un étant Set et l'autre étant Map.
la source
Différences entre HashSet et HashMap en Java
HashSet utilise en interne HashMap pour stocker des objets.Lorsque la méthode add (String) appelée, elle appelle la méthode HahsMap put (key, value) où key = String object & value = new Object (Dummy) .de sorte qu'il ne conserve aucun doublon car les clés ne sont rien d'autre que Value Objet.
les objets qui sont stockés comme clé dans Hashset / HashMap doivent remplacer hashcode & equals contract.
Les clés qui sont utilisées pour accéder / stocker des objets de valeur dans HashMap doivent être déclarées comme finales car, lorsqu'elles sont modifiées, l'objet de valeur ne peut pas être localisé et renvoie null.
la source
A
HashMap
consiste à ajouter, récupérer, supprimer, ... des objets indexés par une clé personnalisée de n'importe quel type.UNE
HashSet
consiste à ajouter des éléments, supprimer des éléments et vérifier si des éléments sont présents en comparant leurs hachages.Ainsi, un HashMap contient les éléments et un HashSet se souvient de leurs hachages.
la source
equals()
méthodes.Différences: par rapport à l'hérarchie: HashSet implémente Set. HashMap implémente Map et stocke un mappage de clés et de valeurs.
Une utilisation de HashSet et HashMap par rapport à la base de données vous aiderait à comprendre la signification de chacun.
HashSet: est généralement utilisé pour stocker des objets de collection uniques. Par exemple: il peut être utilisé comme classe d'implémentation pour stocker une relation plusieurs-à-un entre la
classe Item et la classe Bid où (Item has many Bids ) HashMap: est utilisé pour mapper une clé à une valeur.la valeur peut être nulle ou n'importe quel objet / liste d'objets (qui est un objet en soi).
la source
Un HashSet est implémenté en termes de HashMap . C'est un mappage entre la clé et un objet PRESENT.
la source
Un HashSet utilise un HashMap en interne pour stocker ses entrées. Chaque entrée du HashMap interne est saisie par un seul objet, de sorte que toutes les entrées sont hachées dans le même compartiment. Je ne me souviens pas de ce que le HashMap interne utilise pour stocker ses valeurs, mais cela n'a pas vraiment d'importance puisque ce conteneur interne ne contiendra jamais de valeurs en double.
EDIT : Pour répondre au commentaire de Matthew, il a raison; Je l'ai eu à l'envers. Le HashMap interne est indexé avec les objets qui composent les éléments Set . Les valeurs de HashMap sont un objet qui est simplement stocké dans les buckets HashMap.
la source
HashMap
est uneMap
implémentation, permettant des valeurs en double mais pas des clés en double. . Pour ajouter un objet, une paire clé / valeur est requise. Les clés nulles et les valeurs nulles sont autorisées. par exemple:HashSet
est uneSet
implémentation, qui n'autorise pas les doublons . Si vous avez essayé d'ajouter un objet dupliqué, un appel à lapublic boolean add(Object o)
méthode, alors l'ensemble reste inchangé et retournefalse
. par exemple:la source
vous avez à peu près répondu à votre propre question - hashset n'autorise pas les valeurs en double. il serait trivial de construire un hashset en utilisant un hashmap de sauvegarde (et juste une vérification pour voir si la valeur existe déjà). Je suppose que les différentes implémentations java le font ou implémentent du code personnalisé pour le faire plus efficacement.
la source
java.util.HashSet
dit que c'est soutenu par unjava.util.HashMap
.Fondamentalement, dans HashMap, l'utilisateur doit fournir à la fois la clé et la valeur, tandis que dans HashSet, vous ne fournissez que la valeur, la clé est dérivée automatiquement de la valeur à l'aide de la fonction de hachage. Ainsi, après avoir à la fois la clé et la valeur, HashSet peut être stocké en tant que HashMap en interne.
la source
HashSet et HashMap stockent tous les deux des paires, la différence réside dans le fait que dans HashMap, vous pouvez spécifier une clé tandis que dans HashSet, la clé provient du code de hachage de l'objet
la source
HashMaps
autorise une clé nulle et des valeurs nulles. Ils ne sont pas synchronisés, ce qui augmente l'efficacité. Si nécessaire, vous pouvez les synchroniser en utilisantCollections.SynchronizedMap()
Hashtables
n'autorisent pas les clés nulles et sont synchronisées.la source
HashMap est une implémentation de l'interface de carte HashSet est une implémentation de Set Interface
HashMap Stocke les données sous forme de paire clé / valeur HashSet Stocke uniquement des objets
La méthode Put est utilisée pour ajouter un élément dans la carte La méthode Add est utilisée pour ajouter l'élément est Set
Dans la carte de hachage, la valeur de hashcode est calculée à l'aide de l'objet clé Ici, l'objet membre est utilisé pour calculer la valeur de hashcode qui peut être la même pour deux objets, donc la méthode equal () est utilisée pour vérifier l'égalité si elle renvoie false, ce qui signifie que deux objets sont différents.
HashMap est plus rapide que hashset car une clé unique est utilisée pour accéder à l'objet HashSet est plus lent que Hashmap
la source