J'ai rencontré cette question lors d'un test et j'aimerais la partager avec vous. La question est la suivante : il existe deux variables de chaîne x et y. Quand if (x.equals(y) == true), les deux chaînes existent-elles. ? Différentes implémentations de code de hachage, le jugement est-il correct ? Réponse : Faux, ils ont la même valeur de Hash Code. Analyse : Cette question examine principalement la méthode d'accès aux objets String. Tout d'abord, nous devons clarifier quelle est la valeur de hachage Code de la variable String ? L'état de l'objet String stocké en mémoire est stocké dans la table de hachage. Lorsque différentes chaînes sont générées, elles correspondront à un code de hachage. Le code de hachage de la chaîne est obtenu via la méthode hashCode(), qui renvoie le hachage. de la chaîne. Le code est de type int. Le code de hachage d'un objet String est calculé selon la formule suivante : s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] Remarque : utilisez l'algorithme int, où s[i] est le i-ème caractère de la chaîne, n est la longueur de la chaîne et ^ signifie l'exponentiation. (La valeur de hachage d'une chaîne vide est 0.) La méthode hashCode() dans les données de type String hérite de la méthode hashCode() dans la classe Object et son objectif principal est d'améliorer les performances de la table de hachage (java.util.Hashtable). . Optimisez l'efficacité de l'accès. Lorsque deux chaînes de déclaration identiques apparaissent, une nouvelle instance d'objet ne sera pas recréée, mais le code de hachage existant sera renvoyé et transmis à la référence correspondante. Présentons l'accord général de HashCode, qui est à peu près le suivant : Lors de l'exécution d'une application Java, lorsque la méthode hashCode est appelée deux fois sur le même objet, le même entier doit être renvoyé de manière cohérente, à condition que les informations utilisées lors de la comparaison des l'objet égal n'a pas été modifié. Cet entier n'a pas besoin de rester le même d'une exécution d'une application à une autre exécution de la même application. Si deux objets sont égaux selon la méthode equals(Object), (remarque : cette question est un exemple typique), alors le même entier doit être généré lorsque la méthode hashCode() est appelée sur chacun des deux objets résultat. Si les deux objets ne sont pas égaux selon la méthode equals(java.lang.Object), alors l'appel de la méthode hashCode() sur l'un ou l'autre objet ne génère pas nécessairement des résultats entiers différents. Cependant, dans des applications pratiques, générer différents résultats entiers pour différents objets peut améliorer les performances des tables de hachage.
Cet article provient du blog CSDN Veuillez indiquer la source lors de la réimpression : http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx.
-