在为番石榴的ImmutableMap它说的javadoc:性能警告
性能说明:不同的HashMap,ImmutableMap不为有慢的Object.Equals 元素类型优化(java.lang.Object中)或者 Object.hashCode()实现。您可以通过 让您的元素类型缓存自己的散列代码,并使用缓存值的 来短路等效较慢的算法,从而获得更好的性能。
所以我的第一个问题是如何知道我的元素是否有缓慢的.equals或.hashCode实现?在我的具体实例中,我使用了一个Java Enum作为我的键,因此它有一个有效的.equals和.hashCode默认实现,对吗? (我假设这些值的实现是无关紧要的,只要你不使用值的值访问映射)。
我的第二个问题是“让你的元素类型缓存自己的散列码”甚至意味着!谷歌搜索我似乎无法找到你如何做到这一点的例子。我假设也许这意味着你最终在hashcodes中的hashcode?所以我进入哈希码桶,然后.equals方法使用第二组哈希码内?
如果对象是不可变的,并且经常调用hashcode()/ equals(),那么甚至可以在对象构造期间计算哈希码,而不必担心线程安全性。 – 2013-03-16 22:50:13
@FrankPavageau绝对 - 确实更容易,更安全。 – assylias 2013-03-16 23:14:34