Есть ли какая-то конкретная причина, по которой Eclipse-генерируемые равные используют значения 1231 и 1237 для логических значений? - PullRequest
6 голосов
/ 23 ноября 2011

Название в основном говорит само за себя.Я пробовал поискать в Google, но вернул кучу ложных срабатываний.Я думаю, мне просто интересно, было ли какое-то обоснование за этими двумя конкретными числами или они могли легко быть многими другими наборами чисел?

Редактировать: И, поскольку источник чисел был дан ответлюбая причина, почему авторы булева метода hashCode использовали эти числа (кроме того, что они простые)?Будет ли работать любой другой набор простых чисел?

Ответы [ 5 ]

6 голосов
/ 23 ноября 2011

Эти цифры взяты из официального логического API .

4 голосов
/ 23 ноября 2011

Хеш-функции подвержены коллизиям . Количество столкновений можно уменьшить, используя простые числа (подумайте о факторах, которые имеют простые числа). 1231 и 1237 оба являются простыми числами.

/ e1
Проведя немного больше исследований, я наткнулся на это :

Поскольку они, скорее всего, не будут иметь общих делителей с размер хеш-таблицы (если простое число не делит размер хеш-таблицы), шансы столкновения в общих реализациях хэш-таблицы будут сведено к минимуму.

3 голосов
/ 23 ноября 2011

Они, по-видимому, кратко называют ядро ​​Java Логический класс hashCode() Результаты .

Возвращает: целое число 1231, если этот объект представляет истину; возвращает целое число 1237, если этот объект представляет ложь.

Гораздо более глубокое обсуждение (хотя и заканчивающееся только предположениями, а не точными фактами) можно найти здесь .

1 голос
/ 23 ноября 2011

Это все еще вызывает вопрос о том, откуда они пришли и почему.

Возможно, именно они являются наилучшими оценками количества шагов от чьего-либо офиса до столовой для персонала.Или чей-то номер телефона подруги.Кто знает.

Суть в том, что если вы не отыщете оригинальных (Sun) авторов и не спросите их, вы никогда не узнаете real ответ.(Я предполагаю, что они все еще могут вспомнить реальный ответ и готовы сказать вам!)

Давайте двигаться дальше ...

1 голос
/ 23 ноября 2011

Они приходят из логического метода hashCode . Это просто 2 больших произвольных простых числа. См. Boolean.hashCode ()

...