47 votes

Le hashCode de Java peut-il produire la même valeur pour différentes chaînes ?

Est-il possible d'avoir le même hashcode pour différentes chaînes en utilisant la fonction hashcode de Java ? ou si c'est possible, quel est le % de sa possibilité ?

68voto

Mat Points 104488

Un code de hachage Java est de 32 bits. Le nombre de chaînes possibles qu'il hache est infini.

Alors oui, il y aura des collisions. Le pourcentage n'a pas de sens - il existe un nombre infini d'éléments (chaînes) et un nombre fini de hachages possibles.

32voto

gTito Points 540

OUI. Beaucoup.

Regardez la paire suivante

  • "FB" et "Ea"

peut renvoyer le même code de hachage même si les caractères qu'il contient ne sont pas les mêmes.

Fondamentalement, c'est la somme des caractères d'une chaîne multipliée par un entier.

7voto

adarshr Points 25912

Cela ne répondrait pas directement à votre question, mais j'espère que cela vous aidera.

Ce qui suit provient du code source de java.lang.String .

 /**
 * Returns a hash code for this string. The hash code for a
 * <code>String</code> object is computed as
 * <blockquote><pre>
 * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
 * </pre></blockquote>
 * using <code>int</code> arithmetic, where <code>s[i]</code> is the
 * <i>i</i>th character of the string, <code>n</code> is the length of
 * the string, and <code>^</code> indicates exponentiation.
 * (The hash value of the empty string is zero.)
 *
 * @return  a hash code value for this object.
 */
public int hashCode() {
    int h = hash;
    int len = count;
    if (h == 0 && len > 0) {
    int off = offset;
    char val[] = value;

        for (int i = 0; i < len; i++) {
            h = 31*h + val[off++];
        }
        hash = h;
    }
    return h;
}

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