Те же хеш-коды при использовании не простого числа - PullRequest
0 голосов
/ 01 марта 2019

Если я переопределю метод hashCode (), но для умножения использую не простое число, я все равно получу одинаковые hashCodes для двух одинаковых объектов.

Если я прав, если объекты совпадают, их хеш-кодыТакже должно быть то же самое.Согласно моему предыдущему описанию, это может быть достигнуто даже с использованием не простого числа.Поэтому я хотел спросить, в чем же смысл использовать простое число, такое как 17 или 31?Почему я не могу просто использовать не простое число?

1 Ответ

0 голосов
/ 01 марта 2019

Для работы хеш-таблиц требуется , чтобы хеш-код был одинаковым, если два объекта совпадают.«должно быть» то же самое не достаточно хорошо :-) Тем не менее, причина, по которой хеш-код одинаков даже для не простых чисел, заключается в том, что алгоритм является детерминированным.Который должен быть.Так что эта часть хороша в вашей реализации.

Почему следует использовать простые числа: причина обратная: если два объекта не одинаковы, то было бы здорово, если быхеш-код также отличается.Это не всегда возможно, и если хэш-код иногда совпадает, то это нормально.Но обычно все должно быть иначе.При использовании простых чисел оказывается, что чаще всего хэш-коды различны для разных объектов.Причина, почему это довольно сложно, включает в себя много математики.Подробности смотрите здесь: Зачем использовать простое число в hashCode?

...