key.GetHashCode() возвращает ключ

Я реализую хэш-таблицу и использую GetHashCode для получения уникального хэш-кода для каждого используемого ключа, однако, когда я вызываю key.GetHashCode(), функция возвращает ключ. После того, как я использую модуль, чтобы получить правильный сегмент хеш-таблицы, мы можем реализовать хеш-таблицу, но это выглядит неправильно.

Вот как я это называю.

public V Find(K key)
    {
        int bucketIndex = key.GetHashCode() % N;
        return buckets[bucketIndex].Find(key);
    }

Есть ли специальная инициализация, которую мы должны выполнить перед вызовом gethashcode?

Сейчас я думаю о написании собственной хэш-функции в перегруженной функции, но думаю, что было бы проще использовать вызов функции.


person Denis    schedule 10.01.2016    source источник
comment
Можете ли вы привести минимальный, но полный пример, который воспроизводит вашу проблему?   -  person Jeroen Vannevel    schedule 10.01.2016
comment
В документации по GetHashCode не используется реализация этого метода по умолчанию в качестве уникального идентификатора объекта для целей хэширования (см. msdn.microsoft.com/en-us/library/)   -  person C.Evenhuis    schedule 10.01.2016
comment
GetHashCode() не обязан шифровать значение. Например, если K равно int, то да, вы получите то же значение. Идеальный хэш, очень желательно.   -  person Hans Passant    schedule 10.01.2016
comment
Понимаю. Это означает, что если я хочу получить хеш-функцию, которая лучше распределяет нагрузку (более случайную), мне нужно будет реализовать собственное переопределение, возможно, используя простой шифратор и получая его по модулю.   -  person Denis    schedule 10.01.2016


Ответы (1)