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