145 votes

qu'est-ce que hashCode utiliser pour? est-il unique?

J'ai remarqué il y a un getHashCode() méthode dans tous les contrôles, les éléments, dans WP7, qui de retour d'une séquence de nombre. Puis-je utiliser ce hashcode pour identifier un élément? Par exemple, je veux identifier une image ou d'un morceau dans l'appareil, et de vérifier whereabout. Ce qui pourrait être fait si le hashcode compte tenu des éléments spécifiques est unique.

Peut vous aider à m'expliquer ce qu'est hashCode et getHashCode() utiliser pour?

114voto

SLaks Points 391154

MSDN dit:

Un code de hachage est une valeur numérique qui est utilisé pour identifier un objet au cours de l'égalité des tests. Il peut aussi servir comme un indice d'un objet dans une collection.

La méthode GetHashCode est adapté pour une utilisation dans les algorithmes de hachage et de structures de données comme une table de hachage.

L'implémentation par défaut de la méthode GetHashCode n' garantie unique de valeurs de retour pour les différents objets. En outre, l' .NET Framework ne garantit pas la valeur par défaut de mise en œuvre de la Méthode GetHashCode, et la valeur renvoyée sera le même entre les les différentes versions de la .NET Framework. Par conséquent, la valeur par défaut la mise en œuvre de cette méthode ne doit pas être utilisé comme un objet unique identificateur de hachage fins.

La méthode GetHashCode peut être remplacée par un type dérivé. Valeur les types de remplacer cette méthode pour fournir une fonction de hachage qui est approprié pour ce type et de fournir un utile de distribution dans un table de hachage. Pour l'unicité, le code de hachage doit être basée sur la valeur d'un champ d'instance ou de la propriété au lieu d'un champ statique ou de la propriété.

Les objets utilisés comme un élément clé dans une table de hachage de l'objet doit également remplacer la Méthode GetHashCode parce que ces objets doit générer leur propre hash code. Si un objet utilisé comme une clé n'est pas utile la mise en œuvre de GetHashCode, vous pouvez spécifier un code de hachage fournisseur lorsque la table de hachage de l'objet est construit. Avant l' .NET Framework la version 2.0, le code de hachage prestataire était fondé sur la Système.Les Collections.IHashCodeProvider interface. A partir de la version 2.0, le code de hachage fournisseur est basé sur le Système.Les Collections.IEqualityComparer interface.

Fondamentalement, des codes de hachage existent pour faire les tables de hashage possible.
Deux objets égaux sont garantis pour l'égalité des hashcodes.
Deux inégalité des objets ne sont pas la garantie d'avoir inégale hashcodes (que l'on appelle une collision).

14voto

seand Points 3426

getHashCode() est utilisé pour aider à soutenir à l'aide de l'objet comme une clé pour les tables de hachage. (Une chose de similaire existe en Java, etc). Le but est pour chaque objet pour revenir distinct, le code de hachage, mais souvent, cela ne peut pas être absolument garantie. Il est nécessaire cependant que 2 logiquement les objets égaux retour le même code de hachage.

Typique de la table de hachage de la mise en œuvre commence avec le hashCode de la valeur, prend un module (limitant ainsi la valeur dans une fourchette) et l'utilise comme un indice d'un tableau de "compartiments".

8voto

Phil Sandler Points 12937

Il n'est pas unique à WP7--il est présent sur tous les .Net des objets. Il a en quelque sorte fait ce que vous décrivez, mais je ne le recommanderais pas comme un identificateur unique dans vos applications, qu'il n'est pas garanti d'être unique.

Objet.Méthode GetHashCode

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X