C# переопределение метода GetHashCode
В этом примере плакат переопределил метод get hash code. Я понимаю, что это было сделано для того, чтобы обеспечить лучшее хэш-значение для возвращаемого объекта, уменьшить количество коллизий и, следовательно, уменьшить количество случаев, когда необходимо будет вызвать Equals().
Что я хотел бы знать, так это то, как был вычислен этот алгоритм:
return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode();
Есть ли какая-то особая причина, по которой были выбраны эти числа? Мог ли я просто выбрал свои собственные номера, чтобы положить в него?
3 ответов:
Обычно следует выбирать простые числа. Это позволяет избежать получения одного и того же хэш-значения для разных входных параметров.
Простые числа обычно используются в вычислении хэш-кода для минимизации столкновений. Если вы ищете хэш-код и простые числа на этом iste, вы найдете некоторые подробные объяснения по этому (обратите внимание, что это специфический язык note):
Обычно вы хотите использовать простые числа (как это сделано выше), потому что это уменьшает вероятность столкновений (два экземпляра дают один и тот же результат). Для получения дополнительной информации см.: http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/
Comments