2011-11-22 8 views
6

Il titolo dice praticamente tutto. Ho provato su Google ma restituisco un carico di falsi positivi. Immagino che mi stia chiedendo se ci fosse una certa logica dietro questi due numeri specifici o avrebbero potuto facilmente essere molte altre serie di numeri?C'è qualche ragione particolare per cui Eclipse generato uguale usa i valori di 1231 e 1237 per i booleani?

Modifica: E, dal momento che la fonte dei numeri è stata risolta, c'è un motivo per cui gli scrittori del metodo hashCode booleano hanno usato quei numeri (oltre al fatto che sono primi)? Qualunque altro numero di numeri primi avrebbe funzionato altrettanto bene?

+4

Sono entrambi numeri primi, se questo è di aiuto. –

+0

possibile duplicato di [Boolean.hashCode()] (http://stackoverflow.com/questions/3912303/boolean-hashcode) – assylias

risposta

4

Le funzioni hash sono soggette a collisions. Il numero di collisioni può essere ridotto utilizzando numeri primi (si pensi ai fattori che hanno i numeri primi). 1231 e 1237 sono entrambi numeri primi.

/E1
Dopo aver fatto un po 'più di ricerca mi sono imbattuto in this:

Dal momento che molto probabilmente non avranno divisori comuni con la dimensione tabella hash (a meno che il primo si divises la dimensione tabella hash), le possibilità di collisione nelle implementazioni di hashtable comuni sarebbero ridotte a .

+0

Quindi non c'è niente di speciale in questi due, solo che sono primi? Quindi, 11 e 17 sarebbero altrettanto buoni? – AHungerArtist

+0

@AHungerArtist Più grande è il primo, più sicura sarà la funzione. Per quanto ne so, questo ha le sue radici nella crittografia in cui grandi numeri primi sono stati moltiplicati insieme per generare chiavi ancora più grandi (e abbastanza sicure) per i codici. – Jeffrey

+2

@AHungerArtist Come risulta, più grande è il primo, più grande deve essere l'hashtable prima che ci sia una collisione. In questa situazione, la tabella hash avrebbe 2462 (2 * 1231) bucket prima che si verificasse una collisione. Perché gli sviluppatori di java hanno scelto * questi * numeri primi sarebbe stata una domanda a loro meglio lasciata. – Jeffrey

6

Questi numeri provengono dal numero ufficiale Boolean API.

+1

Ciò pone ancora la domanda su dove vengono e perché. – AHungerArtist

+4

Concordato, ma questo è il motivo per cui Eclipse generato uguali li usa. –

3

Sono apparentemente scorciatoie chiamando il nucleo Java Boolean class hashCode() results.

Resi: il numero intero 1231 se questo oggetto rappresenta true; restituisce il numero intero 1237 se questo oggetto rappresenta false.

Un gran lunga più approfondita discussione (anche se uno che finisce solo con le supposizioni e fatti non hard-e-veloce) può essere trovato here.

1

Che pone ancora la questione di dove quelli provenivano da e perché.

Forse sono le migliori stime del numero di passaggi dall'ufficio di qualcuno alla mensa del personale. O il numero di telefono di una ragazza amica. Chissà.

La linea di fondo è che a meno che non si rintracciano gli autori originali (Sun) e li si chieda, non si saprà mai la risposta reale reale. (Sto supponendo che possono ancora ricordano la vera risposta, e sono pronti a dire!)

Lets muoversi lungo ...