Pourquoi le hashCode() de Java dans String utilise 31 comme multiplicateur
En Java, le code de hachage d'un objet String est calculé à l'aide du formule :
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
où s[i] est le ième caractère de la chaîne, n est la longueur du chaîne, et ^ indique l'exponentiation.
L'importance d'un multiplicateur premier
Un aspect clé de cette formule est l'utilisation d'un multiplicateur premier, dans ce cas, 31 L'utilisation d'un nombre premier présente l'avantage de réduire le risque de collisions de hachage. Si un multiplicateur non premier était utilisé, deux chaînes avec la même valeur de hachage pourraient partager un facteur commun, ce qui faciliterait les collisions de hachage.
Pourquoi pas un autre nombre premier ?
Bien que 31 soit un nombre premier impair, il existe d'autres nombres premiers qui auraient pu être choisis, comme 29, 37 ou 97. Le choix de 31 était basé sur une combinaison de facteurs :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!