En Java, un algorithme hashCode peut être utilisé pour calculer la valeur de hachage d'une chaîne. Aujourd'hui, un ami m'a soudainement demandé si je pouvais calculer hashCode en js. Le résultat du calcul doit être le même que le calcul hashCode de Java.
En ce qui concerne le hashCode de Java, je n'ai jamais compris son algorithme auparavant, mais je suppose que cela ne devrait pas être trop difficile, alors maintenant j'ai écrit ce code en Java pour le tester :
Résultat courant : 899755
Appuyez sur la touche Ctrl et cliquez sur le nom de la méthode hashCode pour suivre et jeter un œil à l'algorithme. J'ai trouvé qu'il s'agissait d'un code très simple, comme indiqué ci-dessous :
pour (int i = 0; i < len; i ) {
h = 31*h val[off];
>
hachage = h;
>
retourner h;
>
D'accord maintenant, transplantez-le simplement dans js et ça devrait aller. J'ai donc écrit le code JS suivant :
OK, le résultat est le même que le calcul Java. Je pensais que c'était fait, puis j'ai pensé à trouver une chaîne aléatoire à tester :
"Shenyang Shenyang", le résultat en JAVA est : 1062711668, mais en js il devient : 26832515444.
J'ai tellement le vertige, il y a quelque chose de mal à essayer ça ! Après avoir réfléchi un instant, j'ai soudainement pensé que la longueur de int en Java semble être d'environ 2,1 milliards, mais qu'il n'y a pas de telle limite en js. Le problème devrait être là, j'ai donc apporté une petite modification à la méthode précédente :
Testez à nouveau ! D'ACCORD! Vous avez terminé. Il n'y a pas de contenu technique, juste un bref résumé
Mis à jour le 19/02/2013, celui ci-dessus est relativement inefficace et plantera lorsque le contenu est très long. Le code suivant est le code optimisé :
.