Я читал, что это исходный код для String.hashCode()
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
Мой вопрос: что такое "смещение" и "хэш"? Я могу сказать, что "значение" - это фактическая строка, а "длина" - ее длина, но я не понимаю, что представляют собой две другие.