2011-11-22 8 views
6

El título básicamente lo dice todo. Intenté Googlear pero devolvió un montón de falsos positivos. Supongo que me pregunto si hubo una cierta razón detrás de estos dos números específicos o podrían haber sido fácilmente muchos otros conjuntos de números.¿Hay alguna razón en particular por la que Eclipse generado equals use los valores de 1231 y 1237 para booleanos?

Edit: Y, dado que se ha respondido la fuente de los números, ¿por qué razón los escritores del método boolean hashCode utilizaron esos números (además de que son primos)? ¿Algún otro conjunto de números primos funcionaría igual de bien?

+4

Los dos son números primos, si te sirve de ayuda. –

+0

posible duplicado de [Boolean.hashCode()] (http://stackoverflow.com/questions/3912303/boolean-hashcode) – assylias

Respuesta

4

Las funciones de hash son propensas a collisions. El número de colisiones se puede reducir usando números primos (piense en los factores que tienen los números primos). 1231 y 1237 son ambos números primos.

/e1
Después de hacer un poco más de investigación me encontré con this:

Ya que es muy probable que no tienen divisores comunes con el tamaño de la tabla hash (a menos que el primer sí divises el tamaño tabla hash), las posibilidades de colisión en las implementaciones de tablas hash comunes serían minimizadas.

+0

¿Entonces no hay nada especial acerca de estos dos, solo que son primos? Entonces, ¿11 y 17 serían igual de buenos? – AHungerArtist

+0

@AHungerArtist Cuanto mayor sea el primo, más segura será la función. Hasta donde yo sé, esto tiene sus raíces en la criptografía donde los números primos grandes se multiplicaron para generar claves aún más grandes (y bastante seguras) para los códigos. – Jeffrey

+2

@AHungerArtist Como resultado, cuanto mayor sea el primo, más grande debe ser el hashtable antes de que haya una colisión. En esta situación, la tabla hash tendría 2462 (2 * 1231) segmentos antes de que ocurriera una colisión. Por qué los desarrolladores de java eligieron * estos * números primos sería una pregunta que les quedaba mejor. – Jeffrey

6

Estos números provienen del Boolean API oficial.

+1

Eso todavía plantea la pregunta de dónde vinieron y por qué. – AHungerArtist

+4

De acuerdo, pero esa es la razón por la cual Eclipse generó iguales los usa. –

3

Aparentemente son atajos para llamar al núcleo de Java Boolean class hashCode() results.

Devuelve: el entero 1231 si este objeto es verdadero; devuelve el entero 1237 si este objeto representa falso.

un cada vez más discusión en profundidad (aunque uno que termina simplemente con suposiciones y los hechos no es difícil y rápidas) se puede encontrar here.

1

Eso todavía plantea la pregunta acerca de dónde procedían de aquellos y por qué.

Tal vez sean las mejores estimaciones del número de pasos desde la oficina de alguien hasta la cafetería del personal. O el número de teléfono de la novia de alguien. Quién sabe.

La conclusión es que, a menos que rastree los autores originales (Sun) y los pregunte, nunca sabrá la respuesta real. (Estoy asumiendo que todavía pueden recordar la verdadera respuesta, y están dispuestos a decir!)

vamos a pasar a lo largo de ...

Cuestiones relacionadas