A volte ho bisogno di implementare il metodo hashCode() di un oggetto combinando gli hashCode dei suoi vari membri di istanza. Ad esempio, se l'obj combinatoria ha membri a, b, ec, vedo spesso ppl implementarlo comequal è il modo migliore per implementare hashCode()?
int hashCode(){
return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode();
}
Da dove viene questo numero magico 31 viene? È la lunghezza di 4 byte o solo un numero primo?
C'è qualche altro modo preferito/standard per implementare hashCode()?
Simile (ma non necessariamente duplicato): http://stackoverflow.com/questions/3613102/why-use-a-prime-number-in-hashcode –
Il numero 31 è utilizzato in String.hashCode() Ciò rende un buon primo dato che non ci sono molti diversi caratteri possibili, tuttavia io tendo ad usare numeri primi più grandi. Un buon sito per i primi "interessanti" è http://primes.utm.edu/curios/ –