在爲番石榴的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