я заметил, что строка, которая содержит нечетное количество специфического характера, скажем, «б» имеет значение хеш-функции, котороеЕсть ли лучший способ модулировать значение хэша в этом случае?
kM+r
где k
и r
целые и M
сила A 2 в. Например, все из следующих строк приводит к тому же значению после модулирования M
, если M
является 2 по мощности (скажем, 16):
"b" hashCode("b") = 98, 98%16 = 2
"bbb" hashCode("bbb") = 97314, 97314%16 = 2
"bbbbb" hashCode("bbbbb") = 293521890, 293521890%16 = 2
...
Если я использую использовать следующую формулу (reference) для модуляции значение хеш-функции, все вышеперечисленные строки хеша к тому же ведру, что определенно NOT что мы хотим.
int bucket_id = (hashCode(str) & 0x7fffffff) % M;
Я делаю что-то неправильно здесь?
Это очень полезно. Благодарю. – Dainy