... однако мы не могли использовать предопределенную хеш-таблицу.
Я думаю, что это ваша реальная ошибка. Если у вас нет экстремальных ограничений производительности или использования памяти, вам лучше использовать одну из стандартных реализаций Java хеш-таблиц (или стороннюю реализацию от Apache Commons, Google Guava и т. Д.). Они работают (при условии, что вы не делаете глупостей ... например, с помощью изменяемых ключей). Они хорошо работают в типичных случаях использования. Все их понимают.
Реализация ваших собственных хеш-таблиц почти наверняка является плохим вариантом, не в последнюю очередь потому, что легко создать реализацию, которая плохо масштабируется во многих отношениях. IMO, ваш лучший выбор в будущем будет состоять в том, чтобы выкинуть свой хэш-код из таблицы самонаведения, прежде чем он станет слишком запутанным в вашем приложении.
Комментируя ваш фактический код, я не понимаю, как хеш-таблица может возможно работать, если вы вставляете в процесс случайные числа. Ваш код непонятен с алгоритмической точки зрения ... для меня это не имеет смысла.
Если бы вы сказали нам, почему думали, что не можете использовать одну из стандартных реализаций, мы, вероятно, сможем посоветовать вам лучше.