Функция FindEntry в Dictionary.cs

Я смотрел на реализацию словаря в .NET, так как я хотел понять, что делает словарь ContainsKey и поиск быстрым:http://referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs,15debc34d286fdb3

Функция ContainsKey в основном приводит к перечислению FindEntry, указанному ниже:

buckets - это массив целых чисел, а записи - это массив объектов Entry, которые представляют собой структуры, содержащие HashCode, TKey и TValue.

Итак, я понимаю, что этот поиск быстрый, так как это простой поиск по массиву.

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;
    }

Однако я пытаюсь понять эти 2 строки:

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

1) Если я правильно понял 0x7FFFFFFF, это гарантирует, что мы не получим отрицательное значение. Так что же возвращает первая строка? Это простое число или простое число?

2) Во второй строке, почему мы инициализируем i в buckets [hashCode% buckets.Length]?

Ответы на вопрос(1)

Ваш ответ на вопрос