Deux objets Java avec les mêmes hashcodes ne sont-ils pas nécessairement égaux?
Je comprends pourquoi donner même hashcode pour les deux parts égales (par equals
) objets est important. Mais c'est la vice versa vrai, si deux objets ont la même hashcode ont-ils être égaux? Le contrat encore tenir? Je ne peux pas trouver un exemple où cela pourrait se produire, parce que si tous les attributs qui prennent part à la méthode equals sont utilisés pour remplacer la méthode hashcode ainsi alors nous pourrons toujours le même hashcode des objets qui sont égaux. S'il vous plaît commentaire.
source d'informationauteur Abidi
Vous devez vous connecter pour publier un commentaire.
Si deux objets ont le même hashcode alors qu'ils ne sont PAS nécessairement égaux. Sinon, vous aurez découvert la fonction de hachage parfait. Mais le contraire est vrai - si les objets sont égaux ,alors ils doivent avoir le même hashcode.
Selon la Javadoc: http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#hashCode%28%29
Edit: Dans le monde réel deux Chaînes peuvent avoir le même code de hachage. Par exemple, si vous souhaitez stocker toutes les combinaisons de caractères possibles qui contiennent de minuscules lettres anglaises (comme "aaaaaaaaaa","aaaaaaaaab" et ainsi de suite) d'une longueur de 10, vous ne pouvez pas affecter un unique code de hachage pour chaque 141.167.095.653.376 combinaisons, depuis int en Java 32 bits et, par conséquent, peut avoir jusqu'à 4.294.967.296 valeurs distinctes.
Le but de la
hashCode
fonction est de permettre aux objets d'être rapidement partitionné en deux ensembles de choses qui sont connues de l'inégalité à tous les éléments en dehors de leur propre jeu. Supposons que l'on a de 1 000 articles et on les divise en dix à peu près égal de taille fixe. Un appel àhashCode
puisse rapidement identifier l'élément que n'étant pas égal à 900 des articles, sans avoir à utiliserequals
sur l'un quelconque de ces éléments. Même si l'on devait utiliserequals
à comparer l'article de 100 autres articles, ce serait encore seulement 1/10 du coût de comparer tous les 1000 points. Dans la pratique, même dans une grande collection,hashCode
vont souvent à éliminer 99,9% ou plus de la répartition inégale des éléments, laissant tout au plus une poignée pour être examiné.Comme une question de fait
Est valide hashcode de la mise en œuvre...mais une des plus terribles. Allons faire tous vos tables de hachage lent.
Mais oui, vous pouvez avoir deux objets différents avec le même hashcode. Mais cela ne devrait pas être le cas général, une réelle mise en œuvre devrait donner différents hashcodes pour différentes valeurs plupart du temps.
Curieusement, NumberFormat est un exemple de Java foundation classes qui contrevient à la recommandation que:
Voici un code indiquant, au moins sous la version de Java, je suis actuellement sous Mac OS X 10.6.
hashCode
la valeur dépend de la mise en œuvre. par exempleString
classe implémentehashCode()
fonction en fonction de la valeur. cela signifieaura le même
hashcode
mais, ce sont deux objets différents. eta==b
sera de retourfalse
.Code de hachage méthode retourne un entier. Si la fourchette de nombre entier finitions puis aussi deux objets différents auront le même code de hachage. Donc, il n'est pas nécessaire que les deux objets différents auront le même code de hachage sont égaux.
À prouver , si deux objets ont la même
hashCode ne veut pas dire qu'ils sont égaux
Dire que vous avez deux classes définies par l'utilisateur