При разработке классов ImmutableSet
и ImmutableMap
в Guava мы выбрали , а не для кэширования хэш-кодов.Таким образом, вы получите лучшую производительность от кэширования хеш-кода тогда и только тогда, когда вы будете достаточно внимательны, чтобы выполнять кэширование самостоятельно.Если бы мы их кэшировали сами, мы бы стоили вам лишних времени и памяти даже в том случае, если вы глубоко заботитесь о скорости и пространстве!
Это правда, что HashMap
выполняет это кэширование, но это был автор HashMap
(Джош Блох), который настоятельно рекомендовал нам не следовать этому прецеденту!
Редактировать: о, к тому же, если ваш hashCode()
медленный, кэширование в коллекции только адресв любом случае, половина проблемы, так как hashCode()
все еще должен вызываться для объекта, переданного в get()
, несмотря ни на что.