Ниже приведен фрагмент исходного кода метода String.hashCode()
из Java 8 (точнее, 1.8.0_131)
<code>/**
* Returns a hash code for this string. The hash code for a
* {@code String} object is computed as
* <blockquote><pre>
* s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
*
* используя арифметику {@code int}, где {@code s [i]}
*
i -й символ строки, {@code n} - длина
* строка, а {@code ^} обозначает возведение в степень.
* (Хеш-значение пустой строки равно нулю.)
*
* @ вернуть значение хеш-кода для этого объекта.
* /
public int hashCode () {
int h = хэш;
if (h == 0 && value.length> 0) {
char val [] = значение;
for (int i = 0; i
Вы можете видеть, что в документации сказано, что hashCode()
вычисляется по следующей формуле
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
в то время как фактическая реализация отличается
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
Я что-то упускаю из виду? Пожалуйста, помогите мне.