2016-10-12 11 views
-1

В настоящее время я просверлил исходный код 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 API Java (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. Кто-нибудь может больше рассуждать об этом? Заранее спасибоПочему два объекта с одним и тем же хэш-кодом не обязательно равны?

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

+1

Есть более возможные 'String's (например), чем есть возможные' int '. В конце концов вы исчерпаете уникальные хэш-коды, даже с отличным алгоритмом хеширования. – resueman

+0

у вас и вашего близнеца есть тот же день рождения, но разные люди .... –

ответ

0

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