Принятый ответ в Best implementation for hashCode method дает, по-видимому, хороший метод для поиска кодов Хэша. Но я новичок в Hash Codes, поэтому я не совсем понимаю, что делать.Хорошая реализация hashCode()
Для 1) имеет значение, какое ненулевое значение я выбираю? Есть 1
так же хорошо, как и другие номера, такие как премьер 31
?
Для 2), следует ли добавить каждое значение в c? Что делать, если у меня есть два поля: long
, int
, double
и т. Д.?
ли я интерпретирую его прямо в этом классе:
public MyClass{
long a, b, c; // these are the only fields
//some code and methods
public int hashCode(){
return 37 * (37 * ((int) (a^(a >>> 32))) + (int) (b^(b >>> 32)))
+ (int) (c^(c >>> 32));
}
}
Какой алгоритм хорош? Хороший ли пример в этом примере? Должен ли я использовать разные простые числа для каждого элемента? – Justin
Я понимаю ваш # 1, но лучше иметь меньше столкновений. – Justin
Любой код может быть любым, но чтобы быть * хорошим * кодом, hashCode не может быть «ничего». См. Object.hashCode() java doc – Bohemian