web-dev-qa-db-fra.com

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 tables de hachage pour stocker des valeurs.

158
SpikETidE

Ce sont des constructions totalement différentes. Une HashMap est une implémentation de Map. A Map associe les clés aux valeurs. La recherche de clé se produit à l'aide du hachage.

D'autre part, un HashSet est une implémentation de Set. Un Ensemble est conçu pour correspondre au modèle mathématique d'un ensemble. Une HashSet utilise un HashMap pour sauvegarder sa mise en œuvre, comme vous l'avez indiqué. Cependant, il implémente une interface entièrement différente.

Lorsque vous recherchez ce qui sera le meilleur Collection pour vos besoins, ceci Tutorial est un bon point de départ. Si vous voulez vraiment savoir ce qui se passe, il y a un livre pour ça , aussi.

141
justkt

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

HashMap est une carte clé -> valeur (clé à valeur), par ex. {a -> 1, b -> 2, c -> 2, d -> 1}

Notez dans mon exemple ci-dessus que dans HashMap, il ne doit pas y avoir de clés en double, mais il peut avoir des valeurs en double.

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

287
b.roth

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, il peut représenter un ensemble d’éléments de HashSet: {“Bonjour”, “Bonjour”, “Au revoir”, “Exécuter”}
  3. HashSet n'autorise pas les éléments en double, ce qui signifie que vous ne pouvez pas 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'il ne convient pas aux opérations thread-safe tant qu'il n'est pas synchronisé explicitement.

                          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é/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'elle est non synchronisée et autorise les valeurs NULL.) Voici comment vous pouvez représenter des éléments HashMap s'il possède une clé entière et une valeur de type String: par exemple {1 -> "Bonjour", 2 -> "Bonjour", 3 -> "Au revoir", 4 -> "Exécuter"}
  3. HashMap n'autorise pas les clés en double, mais il permet d'avoir des valeurs en double.
  4. HashMap autorise une seule clé NULL et un nombre quelconque de valeurs NULL.
  5. 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.

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

S'il vous plaît se référer cet article pour trouver plus d'informations.

58
Avanish Kumar

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 - le Set et Map, comme d'autres l'ont fait remarquer. Ce qu’ils sont, respectivement, sont un ensemble - une collection non ordonnée - et un carte - une collection avec un accès par clé. Celles-ci sont implémentées avec des hachages - c'est de là que viennent les noms - mais leur essence est cachée derrière cette partie de leur nom.

Ne soyez pas confus par leurs noms; ce sont des choses profondément différentes.

34
Carl Manaster

HashSet nous permet de stocker des objets dans le même ensemble que HashMap nous permet de stocker des objets sur la base de la clé et de la valeur. Chaque objet ou objet stocké aura une clé.

3
Spidfire

La Hashset implémente en interne HashMap. Si vous voyez l'implémentation interne , les valeurs insérées dans HashSet sont stockées en tant que clés dans HashMap et la valeur est un objet factice de la classe Object.
La différence entre HashMap et HashSet est: -

  1. HashMap contient les paires clé-valeur et chaque valeur est accessible par clé où HashSet doit être itéré à chaque fois car il n'y a pas de méthode get.
  2. HashMap implémente l'interface Map et autorise une valeur NULL en tant que clé et plusieurs valeurs NULL en tant que valeurs.Lorsque HashSet implémente l'interface Set, n'autorise qu'une valeur NULL et aucune valeur dupliquée. autorisé dans la clé HashMap, d'où une valeur nulle dans HashSet, car HashSet implémente HashMap en interne).
  3. HashSet et HashMap ne conserve pas l'ordre d'insertion lors de l'itération.
3
Abhay S

Comme les noms l’impliquent, un HashMap est un associatif Map (mappage d’une clé à une valeur), un HashSet est simplement un Définir.

2
leonbloy

Un HashMap consiste à ajouter, obtenir, supprimer, ... des objets indexés par une clé personnalisée de tout type.
Un HashSet consiste à ajouter des éléments, à supprimer des éléments et à 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

Différences entre HashSet et HashMap en Java

1) La 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 des garanties HashSet. l'unicité en n'autorisant pas les doublons.En réalité, 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ù sa mise d'objet dans la carte en tant que 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 une clé et une valeur dans HashMap en Java.

) 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 différents de Collection, l'un étant Set et l'autre Map.

1
Vibha Sanskrityayan

Différences: par rapport à 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 HashMap en ce qui concerne 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. E.g: il pourrait être utilisé comme classe d’implémentation pour stocker la relation plusieurs-à-un entre
Item de classe et enchère de classe où (Item a beaucoup d'enchères)HashMap: est utilisé pour mapper une clé sur value. la valeur peut être null ou un objet./list of Object (qui est un objet en soi).

1

Différences entre HashSet et HashMap en Java

HashSet utilise en interne HashMap pour stocker objects.when la méthode add (String) appelée appelle la méthode HahsMap put (key, value) où key = String object & value = new Object (Dummy). Objet.

les objets qui sont stockés en tant que clés dans Hashset/HashMap doivent remplacer le contrat hashcode & equals.

Les clés utilisées pour accéder/stocker des objets de valeur dans HashMap doivent être déclarées comme étant définitives car, lorsqu'elles sont modifiées, l'objet Value ne peut pas être localisé et renvoie la valeur null.

1
user3539704

Un HashSet est implémenté en termes de HashMap . C'est un mappage entre la clé et un objet PRESENT.

0

Un HashSet utilise un HashMap en interne pour stocker ses entrées. Chaque entrée du HashMap interne est codée par un seul objet. Par conséquent, toutes les entrées sont hachées dans le même compartiment. Je ne me souviens pas de ce que HashMap interne utilise pour stocker ses valeurs, mais cela n'a pas vraiment d'importance, car 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 à clé avec les objets qui composent les éléments Set. Les valeurs de HashMap sont un objet simplement stocké dans les compartiments HashMap.

0
Andy Gherna

HashMap est une implémentation de Map, permettant valeurs dupliquées mais pas les clés dupliquées.. Pour ajouter un objet, une paire clé/valeur est requise. Les valeurs Null Keys et Null sont autorisées. par exemple:

{The-> 3, world-> 5, is-> 2, Nice-> 4}

HashSet est une implémentation Set qui ne permet pas les doublons Si vous essayez d'ajouter un objet en double, appelez la méthode public boolean add(Object o), le jeu reste inchangé et retourne false. par exemple:

[Le monde est, Nice]

0
Meenakshi Pant