



Если у вас уже есть зависимость от Apache Commons Lang, вы также можете использовать HashCodeBuilder:
new HashCodeBuilder().append(bytes).toHashCode();
Как предложил Джош Блох в его книге «Эффективная Java»:
public int hashCode() {
int result = 17;
for (int i = 0; i < array.length; i++) {
result = 31*result + (int)array[i];
}
return result;
}
Вы случайно не помните, почему нужно использовать 31? Это простое число, но была и другая причина, которую я не помню.
Я думаю, что Блох написал, что по некоторым причинам, подкрепленным математическими теориями, используется простое число. он позволяет равномерно распределять ключи в хэш-таблице, предотвращая создание связанных списков значений, ключи которых имеют одинаковый хэш-код
Я просто не могу понять, почему результат создается со значением 17. И 31 целое число кажется 37 в отсканированной версии Google Книг books.google.com/….
Apache Commons предназначен для Java SE - неприменимо к Java ME / MIDP