C# переопределение метода GetHashCode



В этом примере плакат переопределил метод get hash code. Я понимаю, что это было сделано для того, чтобы обеспечить лучшее хэш-значение для возвращаемого объекта, уменьшить количество коллизий и, следовательно, уменьшить количество случаев, когда необходимо будет вызвать Equals().

Что я хотел бы знать, так это то, как был вычислен этот алгоритм:

return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode();
Есть ли какая-то особая причина, по которой были выбраны эти числа? Мог ли я просто выбрал свои собственные номера, чтобы положить в него?
277   3  

3 ответов:

Обычно следует выбирать простые числа. Это позволяет избежать получения одного и того же хэш-значения для разных входных параметров.

Простые числа обычно используются в вычислении хэш-кода для минимизации столкновений. Если вы ищете хэш-код и простые числа на этом iste, вы найдете некоторые подробные объяснения по этому (обратите внимание, что это специфический язык note):

Обычно вы хотите использовать простые числа (как это сделано выше), потому что это уменьшает вероятность столкновений (два экземпляра дают один и тот же результат). Для получения дополнительной информации см.: http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/

    Ничего не найдено.

Добавить ответ:
Отменить.