Pourquoi est-HashMap plus vite que HashSet?
J'ai été la lecture/la recherche de la raison pour laquelle HashMap
est plus rapide que HashSet
.
Je ne suis pas tout à fait comprendre les instructions suivantes:
HashMap
est plus rapide queHashSet
parce que les valeurs sont associées à une clé unique.- Dans
HashSet
, membre de l'objet est utilisé pour le calcul de hashcode de la valeur qui peut être la même pour les deux objets afin deequals()
méthode est utilisée pour vérifier l'égalité. Si elle renvoiefalse
, cela signifie que les deux objets sont différents. DansHashMap
, le hashcode de la valeur est calculée à l'aide de la clé de l'objet. - La
HashMap
hashcode valeur est calculée à l'aide de la clé de l'objet. Ici, l'objet de membre est utilisée pour calculer le hashcode, qui peut être le même pour les deux objets, de sorteequals()
méthode est utilisée pour vérifier l'égalité. Si elle renvoiefalse
, cela signifie que les deux objets sont différents.
Pour conclure ma question:
- J'ai pensé
HashMap
etHashSet
calculer le hashcode de la même manière. Pourquoi sont-ils différents? - Pouvez-vous donner un exemple concret comment
HashSet
etHashMap
le calcul de la hashcode différemment? - Je sais ce qu'est un "objet clé", mais que signifie-t-il par les membres de "l'objet"?
HashMap
peut faire les mêmes choses queHashSet
, et au plus vite. Pourquoi avons-nous besoinHashSet
? Exemple:HashMap <Object1, Boolean>= new HashMap<Object1, boolean>(); map.put("obj1",true); => exist map.get("obj1"); =>if null = not exist, else exist
Vous devriez lire à propos de la différence entre
Hashset est construit sur la table de hachage. Et l'Ensemble est utilisé pour l'unicité. Il nota la valeur de clé de paire de la collection.
Oui. Je sais qu'ils mettent en œuvre différentes de l'interface. Mais certaines personnes disent que le hashset est à l'aide de hashmap dans le backend. Si c'est la vérité, pourquoi hashset sera plus lente que la table de hachage?
essayez-le vous-même.... si vous ne croyez pas si.. j'ai été faire un en ligne juge à l'aide de hashset mais le temps de dépasser. Mais j'ai changé pour une table de hachage, j'ai passé.
Vous pouvez sauvegarder votre demande avec des exemples de code que vous avez testé, les horaires etc?
Map
et Set
. Ils sont de deux types différents de Collection
s. Une fois que vous l'aurez fait, il devrait être clair pourquoi l'obtention d'un objet spécifique à partir d'une carte est plus rapide qu'à partir d'un ensemble.Hashset est construit sur la table de hachage. Et l'Ensemble est utilisé pour l'unicité. Il nota la valeur de clé de paire de la collection.
Oui. Je sais qu'ils mettent en œuvre différentes de l'interface. Mais certaines personnes disent que le hashset est à l'aide de hashmap dans le backend. Si c'est la vérité, pourquoi hashset sera plus lente que la table de hachage?
essayez-le vous-même.... si vous ne croyez pas si.. j'ai été faire un en ligne juge à l'aide de hashset mais le temps de dépasser. Mais j'ai changé pour une table de hachage, j'ai passé.
Vous pouvez sauvegarder votre demande avec des exemples de code que vous avez testé, les horaires etc?
OriginalL'auteur runcode | 2013-04-29
Vous devez vous connecter pour publier un commentaire.
Performance:
Si vous regardez le code source de HashSet (au moins JDK 6, 7 et 8), il utilise la table de hachage interne de manière à ce qu'il fait exactement ce que vous faites avec des exemples de code.
Donc, si vous avez besoin d'un Jeu de mise en œuvre, vous utilisez HashSet, si vous avez besoin d'une Carte - HashMap. Le Code à l'aide HashMap au lieu de HashSet aura exactement les mêmes performances que l'utilisation de HashSet directement.
Choisir la bonne collection
Carte - cartes, des clés à des valeurs (tableau associatif) - http://en.wikipedia.org/wiki/Associative_array.
Ensemble - une collection qui ne contient pas les éléments en double - http://en.wikipedia.org/wiki/Set_(computer_science).
Si la seule chose que vous avez besoin de votre collection pour est de vérifier si un élément est présent dans n'utiliser Ensemble. Votre code sera plus propre et plus compréhensible pour les autres.
Si vous avez besoin de stocker des données pour votre éléments de la Carte d'utilisation.
OriginalL'auteur denis
Aucune de ces réponses vraiment expliquer pourquoi HashMap est plus rapide que HashSet. Ils ont tous deux pour calculer le hashcode, mais à réfléchir sur la nature de la clé d'une HashMap - il est généralement une simple Chaîne de caractères, ou même un certain nombre. Le calcul de la hashcode de qui est beaucoup plus rapide que la valeur par défaut hashcode de calcul de la totalité de l'objet. Si la clé de la table de hachage a le même objet que celui stocké dans un HashSet, il n'y aurait pas de réelle différence dans la performance. La différence est dans ce genre d'objet est la table de hachage de la clé.
OriginalL'auteur TwinFeats