Сначала я думаю, что вы должны определить, что вы подразумеваете под хорошим распространением для себя. Вы имеете в виду хороший спред для всех возможных входов или просто хороший спред для вероятного входа?
Например, если вы хэшируете строки, которые представляют правильные полные (имя + фамилия) имена, вы вряд ли будете беспокоиться о том, как обстоят дела с хэшированием числовых символов ASCII.
Что касается тестирования, вам лучше всего получить огромный или случайный входной набор данных, который вы ожидаете, и протолкнуть его через хэш-функцию и посмотреть, как заканчивается спред. Вряд ли найдется волшебная программа, которая может сказать: «Да, это хорошая хеш-функция для вашего случая использования». Однако, если вы можете программно сгенерировать входные данные, вы легко сможете создать модульный тест, который генерирует его значительный объем, а затем убедиться, что спред находится в пределах вашего определения товара.
Редактировать: В вашем случае с 64-битной длиной, есть ли причина использовать хэш-карту? Почему бы просто не использовать сбалансированное дерево напрямую и напрямую использовать long как ключ, а не перефразировать его? Вы платите небольшое штраф за общий размер узла (в 2 раза больше значения ключа), но в итоге можете сэкономить его на производительности.