Почему два объекта с одинаковым хэш-кодом не обязательно равны?

В настоящее время я изучил исходный код JSE для развлечения. Из некоторых руководств я нашел принцип two equals objects (i.e. as to object a and b a.equals(b) returns true) must have the same hashcode, on the other hand, two objects with the same hashcode are not necessarily equals. Согласно исходному коду HashTable Java API (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Hashtable.java), например. обратитесь к строке 254, мы можем почти вывести equals => same hashcode, но я до сих пор не могу полностью понять, почему two objects with the same hashcode are not necessarily equals. Кто-нибудь может привести больше аргументов по этому поводу? заранее спасибо

Примечание! Этот вопрос больше интересует, почему два объекта с одинаковым хеш-кодом не обязательно равны


person Rui    schedule 12.10.2016    source источник
comment
Возможных String (например), больше, чем возможных int. В конце концов у вас закончатся уникальные хеш-коды, даже с идеальным алгоритмом хеширования.   -  person resueman    schedule 12.10.2016
comment
у вас и вашего брата-близнеца день рождения в один день, но вы разные люди...   -  person ΦXocę 웃 Пepeúpa ツ    schedule 12.10.2016


Ответы (1)


Это просто вопрос подсчета. Хэш-код представляет собой целое число, поэтому имеет 32 бита. Возьмем, к примеру, Long. Поскольку он имеет длину 64 бита, значений гораздо больше, чем 232. Следовательно, должно быть много значений с одинаковым хеш-кодом.

person Henry    schedule 12.10.2016