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.
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.
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.
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 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.
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.
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é.
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: -
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.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).HashSet
et HashMap
ne conserve pas l'ordre d'insertion lors de l'itération.Comme les noms l’impliquent, un HashMap est un associatif Map (mappage d’une clé à une valeur), un HashSet est simplement un Définir.
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.
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.
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).
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.
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.
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]