FindEntry-Funktion in Dictionary.cs

Ich habe mir die Implementierung des Wörterbuchs in .NET angesehen, da ich verstehen wollte, warum das Wörterbuch ContainsKey enthält und schnell nachschlägt:http: //referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs,15debc34d286fdb

Die ContainsKey-Funktion führt im Wesentlichen zu dem unten aufgeführten FindEntry:

buckets ist ein Array von Ganzzahlen, und entries sind ein Array von Entry-Objekten, bei denen es sich um Strukturen handelt, die HashCode, TKey und TValue enthalten.

So verstehe ich, dass diese Suche schnell ist, da es eine einfache Array-Suche ist.

private int FindEntry(TKey key) {
        if( key == null) {
            ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
        }
   if (buckets != null) {
            int hashCode = comparer.GetHashCode(key) & 0x7FFFFFFF;
            for (int i = buckets[hashCode % buckets.Length]; i >= 0; i = entries[i].next) {
                if (entries[i].hashCode == hashCode && comparer.Equals(entries[i].key, key)) return i;
            }
        }
        return -1;
    }

Jedoch versuche ich diese 2 Zeilen zu verstehen:

int hashCode = comparer.GetHashCode(key) & 0x7FFFFFFF;
        for (int i = buckets[hashCode % buckets.Length]; i >= 0; i = entries[i].next)

1) Wenn ich das richtig verstehe, ist 0x7FFFFFFF da, um sicherzustellen, dass wir keinen negativen Wert bekommen. Also, was kommt die erste Zeile zurück? Ist es eine einfache Ganzzahl oder eine Primzahl?

2) Warum initialisieren wir in der zweiten Zeile i zu Buckets [hashCode% buckets.Length]?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage