2012-02-07 2 views
1

com.google.common.collect.arbitrary() утверждает, что обеспечивает достоверное сравнение произвольных объектов с помощью System.identityHashCode(Object). Однако, поскольку hashCode представляет собой 32-битное количество, я не вижу, как это может работать в 64-разрядном адресном пространстве, где может быть более 2 ** 32 экземпляров объектов. Является ли мой скептицизм оправданным?Действительно ли com.google.common.collect.Ordering.arbitrary надежный в 64-разрядном адресном пространстве?

ответ

1

Исходный код показывает, что в случае столкновения между двумя идентификационными хэш-кодами разных объектов компаратор возвращается к карте, связывающей каждый из объектов с счетчиком, который увеличивается каждый раз, когда новый объект хранится в карта.

См. http://docs.guava-libraries.googlecode.com/git-history/v11.0.1/javadoc/src-html/com/google/common/collect/Ordering.html#line.200

Смежные вопросы