Wie ist GetHashCode() implementiert für Int32?
Ich habe auf der Suche alle über dem Platz, aber ich kann nichts finden. Kann jemand etwas Licht in diese Schuppen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe auf der Suche alle über dem Platz, aber ich kann nichts finden. Kann jemand etwas Licht in diese Schuppen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut Reflektor:
Macht Sinn, nicht wahr?
int a = 10;
undint b = 10.GetHashCode();
bietet verschiedene x86-Anweisungen. Wir sehen, dass diese one-line-Methode wird eingebettet, so dass es sollte die gleiche sein, ist es aber nichtBeste Weg, um hash-32-bit-Wert auf 32 bit ist nicht zu erfinden, Rad, verwenden Sie ein Wert an sich. Sehr schnell, keine Kollisionen, die in der Tat perfekt.
hashCode % bucketLength
. Daher ist die Allgemeine Abfolge von0, 1, 2, 3, ...
haben perfekte hash-codes. Allerdings, wenn Sie Ihre Eingabe ist0, 32, 64, 96, 128, ...
alle Kraft-der-zwei-Eimer-array-Größe <= 32 100% hash-Kollisionen. Wenn MS ändern würde, es zu tun, einige bit-shuffling, es wird eine andere Sequenz, gebe 100% hash-Kollisionen. Mein Punkt ist, es gibt keinen Kontext für Int32 und ohne Kontext kann man nicht machen, eine gute hash-Funktion. Wenn Sie brauchen, um die hash-Daten, schreiben Sie Ihre eigenen hasher.