Différence entre HashSet et HashMap?

Mis à part le fait que HashSet n'autorise pas les valeurs en double, Quelle est la différence entre HashMap et Hashset?

Je veux dire la mise en œuvre Sage? C'est un peu vague car les deux utilisent des tables de hachage pour stocker des valeurs.

136
demandé sur nbro 2010-05-05 17:56:41

21 réponses

Ce sont des constructions entièrement différentes. Un HashMap est une application de Map. A Map mappe les clés aux valeurs. La recherche de clé se produit en utilisant le hachage.

D'autre part, un HashSet est une application de Set. Un Set est conçu pour correspondre le modèle mathématique d'un ensemble. A HashSet utilise un HashMap pour sauvegarder son implémentation, comme vous l'avez noté. Cependant, il implémente une interface entièrement différente.

Lorsque vous cherchez ce qui sera le meilleur Collection pour vos besoins, ce tutoriel {[9] } est un bon point de départ. Si vous voulez vraiment savoir ce qui se passe, Il y a un livre pour cela, aussi.

123
répondu justkt 2016-08-18 13:09:06

HashSet est un set, par exemple {1,2,3,4,5}

HashMap est un clé -> valeur (clé / valeur) de la carte, 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 y avoir des valeurs en double.

Dans le HashSet, il ne doit pas y avoir d'éléments en double.

273
répondu b.roth 2010-05-05 14:00:39

HashSet

  1. la classe HashSet implémente L'interface Set
  2. dans HashSet, nous stockons des objets (éléments ou valeurs) par exemple si nous avons un HashSet d'éléments de chaîne alors il pourrait représenter un ensemble D'éléments de HashSet: {"Bonjour", "Salut"," Bye","exécuter"}
  3. HashSet n'autorise pas les éléments en double qui signifient que vous impossible de stocker les valeurs en double dans HashSet.
  4. HashSet permet d'avoir une seule valeur null.
  5. HashSet n'est pas synchronisé, ce qui signifie qu'ils ne le sont pas convient pour les opérations thread-safe jusqu'à moins que synchronisé explicitement.[similarité]

                          add      contains next     notes
    HashSet               O(1)     O(1)     O(h/n)   h is the table 
    

HashMap

  1. la classe HashMap implémente l'interface Map
  2. HashMap est utilisé pour stocker des paires clé et valeur. En bref, il maintient le mappage de la clé et de la valeur (la classe HashMap est à peu près équivalente à Hashtable, sauf qu'il est non synchronisé et autorise les valeurs NULL.) Ce est-ce que vous pourriez représenter des éléments HashMap s'il a une clé entière et la valeur du type de chaîne: par exemple, {1->"Bonjour", 2->"Salut", 3->"Bye", 4 - > "Exécuter"}
  3. HashMap n'autorise pas les clés en double, mais il permet d'avoir des valeurs en double.
  4. HashMap permet une clé null unique et un nombre quelconque de valeurs null.
  5. HashMap n'est pas synchronisé, ce qui signifie qu'ils ne sont pas adaptés aux opérations thread-safe jusqu'à ce qu'ils ne soient pas synchronisés explicitement.[similarité]

                           get      containsKey next     Notes
     HashMap               O(1)     O(1)        O(h/n)   h is the table 
    

Veuillez vous référer à CET article pour plus d'informations.

42
répondu Avanish Kumar 2017-02-21 10:32:37

C'est vraiment dommage que leurs deux noms commencent par Hash . C'est la partie la moins importante d'entre eux. Les parties importantes venir après le Hash - le Set et Map, comme d'autres l'ont souligné. Ce qu'ils sont, respectivement, sont un Set - une collection non ordonnée - et un Map - une collection avec accès par clé. Ils sont implémentés avec des hachages-c'est d'où 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.

32
répondu Carl Manaster 2010-05-05 18:30:18

HashSet nous permet de stocker des objets dans l'ensemble où as 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é.

3
répondu Spidfire 2010-05-05 13:59:57

Comme le nom l'indique, un HashMap est une associatif Map (cartographie à partir d'une clé à une valeur), un HashSet est juste un Set.

2
répondu leonbloy 2010-05-05 14:00:00

1) la première et la plus significative différence entre HashMap et HashSet est que HashMap est une implémentation de Map interface tandis que HashSet est une implémentation de Set interface, ce qui signifie que HashMap est une structure de données basée sur une valeur clé et HashSet garantit l'unicité en ne permettant pas duplicates.In 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:

public boolean add(E e) {
  return map.put(e, PRESENT)==null;
}

Où son objet de mise dans la carte comme clé et valeur est un objet final présent qui est factice.

2) La deuxième différence entre HashMap et HashSet est que, nous utilisons la méthode add() pour mettre 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 n'autorise qu'une seule clé null, mais HashMap peut autoriser une clé null + plusieurs valeurs null.

C'est tout sur la différence entre HashSet et HashMap en Java. En résumé HashSet et HashMap sont deux types de Collection différents un être ensemble et d'autres étant carte.

2
répondu Piqué 2016-03-16 23:28:26

Un HashMap est d'ajouter, d'obtenir, de supprimer, d' ... objets indexés par une clé personnalisée de tout type.
A HashSet est d'ajouter des éléments, de supprimer des éléments et de vérifier si des éléments sont présents en comparant leurs hachages.

Donc, un HashMap contient les éléments et un HashSet se souvient de leurs hachages.

1
répondu Martijn Courteaux 2010-05-05 14:04:21

Différences: avec respect pour la hiérarchie: HashSet implémente Set. HashMap implémente Map et stocke un mappage de clés et de valeurs.

Une utilisation de HashSet et de 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 pourrait être utilisé comme classe d'implémentation pour stocker le navire de relation plusieurs à un entre
Article de classe et enchère de classe où (L'article a beaucoup Offres) HashMap: est utilisé pour mapper une clé à la valeur.la valeur peut être null ou N'importe quel objet / liste D'objet (qui est objet en soi).

1
répondu frictionlesspulley 2010-05-05 18:22:37

les 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). donc, il ne maintient pas de doublons car les clés ne sont que des objets de valeur.

Les objets stockés en tant que clé dans Hashset / HashMap doivent remplacer hashCode & equals contract.

Clés qui sont utilisées pour accéder/stocker des objets de valeur dans HashMap devrait être déclaré comme Final car quand il est modifié, L'objet de valeur ne peut pas être localisé et renvoie null.

1
répondu user3539704 2014-04-16 05:14:36

Le Hashset implémente en interne HashMap. Si vous voyez l'implémentation interne sur http://javaconceptoftheday.com/how-hashset-works-internally-in-java / les valeurs insérées dans HashSet sont stockées en tant que clés dans le HashMap et la valeur est un objet fictif de la classe Object. Différence entre HashMap vs HashSet est:- 1. HashMap contient des paires de valeurs clés et chaque valeur est accessible par clé où as HashSet doit être itéré à chaque fois car il n'y a pas de méthode get. 2. HashSet implémente L'interface Map et autorise une valeur null comme clé et plusieurs valeurs null comme valeurs.Où comme HashSet implémente L'interface Set, n'autorise qu'une seule valeur nulle et aucune valeur dupliquée.(Remeber une clé null est autorisée dans la clé HashMap, donc une valeur null dans HashSet en tant qu'implémentations HashSet HashMap en interne). 3.HashSet et HashMap ne maintiennent pas l'ordre d'insertion lors de l'itération.

1
répondu Abhay S 2017-05-11 05:25:04

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'avais à l'envers. Le HashMap interne est saisi avec les objets qui composent le Définir les éléments . Les valeurs du HashMap sont un objet qui est simplement stocké dans les compartiments HashMap.

0
répondu Andy Gherna 2010-05-05 14:40:59

Différences entre HashSet et HashMap en Java

1) la première et la plus significative différence entre HashMap et HashSet est que HashMap est une implémentation de Map interface tandis que HashSet est une implémentation de Set interface, ce qui signifie que HashMap est une structure de données basée sur une valeur clé et HashSet garantit l'unicité en ne permettant pas duplicates.In 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 verra le code suivant:

public boolean add(E e) 
{
    return map.put(e, PRESENT)==null;
}

Où son objet de mise dans la carte en tant que clé et valeur est un objet final présent qui est factice.

2) la deuxième différence entre HashMap et HashSet est que, nous utilisons la méthode add() pour mettre 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 n'autorise qu'une seule clé null, mais HashMap peut autoriser une clé null + plusieurs valeurs null.

C'est tout sur la différence entre HashSet et HashMap en Java. En résumé, HashSet et HashMap sont deux types de Collection différents, l'un étant défini et L'autre étant Map.

0
répondu Vibha Sanskrityayan 2013-02-05 09:26:12

HashSet

HashSet est l'implémentation de Set Interface qui n'autorise pas la valeur en double toutes les méthodes qui sont dans Collection Framework sont également dans Set Interface par défaut, mais quand nous parlons de Hash set, l'essentiel est que les objets qui vont être stockés dans HashSet doivent remplacer les méthodes equals() et hashCode () afin que nous puissions vérifier l'égalité et aucune valeur en double ne soit stockée dans notre set.si nous avons créé nos propres objets nous devons implémenter hashCode () et equal () de manière à pouvoir comparer correctement les objets lors du stockage dans un ensemble afin que les objets en double ne soient pas stockés,si nous n'avons pas remplacé cette méthode, les objets prendront l'implémentation par défaut de cette méthode.

Méthode: la méthode publique booléenne add (Object o) est utilisée pour ajouter un élément dans un ensemble qui renvoie false s'il s'agit d'une valeur en double dans le cas de HashSet sinon renvoie true si elle est ajoutée réussi.

HashMap

HashMap est une implémentation de Map Interface, qui mappe une Clé À value.Les clés en double ne sont pas autorisées dans une carte.Fondamentalement, l'Interface map a deux classes d'implémentation HashMap et TreeMap la principale différence est que TreeMap maintient l'ordre des objets, mais HashMap ne le fera pas.HashMap autorise les valeurs null et les clés null.HashMap n'est pas synchronisé, mais collection framework fournit des méthodes afin que nous puissions les synchroniser si plusieurs threads sont aller accéder à notre hashmap et un fil est structurellement changer notre carte.

Méthode public Object put (clé D'objet,valeur D'objet) méthode est utilisée pour ajouter un élément dans la carte.

0
répondu Ramkailash 2014-07-05 08:59:26

HashMap est un Map mise en œuvre, permettant les valeurs en double, mais pas des doubles des clés.. Pour ajouter un objet, une paire clé/valeur est requise. Les clés Null et les valeurs Null sont autorisées. par exemple:

{Le - > 3,Monde - > 5, est - > 2, nice - > 4}

HashSet est une implémentation Set, qui n'autorise pas les doublons .Si vous avez essayé d'ajouter un objet en double, un appel à la méthode public boolean add(Object o), l'ensemble reste inchangé et renvoie false. par exemple:

[le, monde, est, agréable]

0
répondu Meenakshi Pant 2016-01-24 15:45:32

Un HashSet {[2] } est implémenté en termes de HashMap . C'est un mappage entre la clé et un objet présent.

-1
répondu Matthew Flaschen 2010-05-05 13:59:05

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.

-1
répondu oedo 2010-05-05 13:59:19

Fondamentalement dans HashMap, l'utilisateur doit fournir à la fois la clé et la valeur, alors que dans HashSet vous ne fournissez que la valeur, la clé est dérivée automatiquement de la valeur en utilisant la fonction de hachage. Donc, après avoir à la fois la clé et la valeur, HashSet peut être stocké en tant que HashMap en interne.

-1
répondu Munish Goyal 2011-08-07 06:50:44

HashSet et HashMap deux paires de magasins, 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

-1
répondu prateeksarda 2012-10-23 18:48:58

HashMaps autoriser une clé null et des valeurs null. Ils ne sont pas synchronisés, ce qui augmente l'efficacité. Si c'est nécessaire, vous pouvez les synchroniser en utilisant Collections.SynchronizedMap()

Hashtables n'autorisez pas les clés null et sont synchronisées.

-1
répondu Appesh 2013-04-04 12:22:21

HashMap est une implémentation de Map interface HashSet est une implémentation de Set Interface

HashMap stocke les données sous forme de paire clé-valeur HashSet Stocker uniquement les objets

Mettez méthode est utilisée pour ajouter un élément dans la carte Add méthode est utilisée pour ajouter l'élément est défini

Dans la carte de hachage, la valeur du 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 identique 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

-1
répondu Hengameh 2015-05-04 14:31:58