C # Переопределение метода GetHashCode - PullRequest
7 голосов
/ 31 мая 2011

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

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

return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode();

Есть ли какая-то конкретная причина, по которой были выбраны рассматриваемые числа?Могу ли я просто выбрать свои собственные номера, чтобы вставить в него?

Ответы [ 3 ]

4 голосов
/ 31 мая 2011

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

2 голосов
/ 31 мая 2011

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

1 голос
/ 31 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...