2012-04-25 66 views
3

我的應用程序在1.41.6上運行。元素順序正在打印1.6版本不同於1.4。我用LinkedHashMap修復了這個問題。現在這個順序和1.4完全一樣。除了下載整個jdk,我沒有找到1.4的源代碼HashMap。除了新版本中的通用改變?hashmap 1.4和1.6之間的區別

回答

4

從未保證HashMap中元素的迭代順序,因此實現可以自由更改。這個缺點已由LinkedHashMap糾正。

這樣的變化可能是由例如complete revamping of the hashing algorithm in Java 1.4.1 ...但是再一次,我們在將項目遷移到Java6時也注意到了這種變化,因此該版本也發生了變化。

2

HashMap中的迭代順序是undefined。這意味着它可以(並且一直)改變。它不僅取決於代碼,而且取決於對象散列碼的值,它們本身不僅可以在版本之間有所不同,甚至可以從運行到運行。

LinkedHashMap具體作爲HashMap替代具有可預測的迭代次序。

+0

我同意訂單取決於對象的哈希碼,這就是它在每次運行時總是用於舊版和新版的相同訂單的原因。我不明白的是,在任何版本的每次運行中訂單都得到了更改?我總是習慣於每次運行都得到相同的訂單。 – Delta 2012-04-25 16:19:49

+0

或者由於密鑰的哈希碼是由對象的字符串字段之一計算的,因此可以看到此行爲? – Delta 2012-04-25 16:22:35

+0

我的意思是,如果你的鍵使用默認的'Object.hashCode()',那麼順序可以在不同的運行中變化。這些值最終基於內存地址,因此在運行之間會發生變化。 – 2012-04-25 16:55:23

0

我想HashMap的實現已經改變了。 HashMap不保證任何順序,所以你不應該依賴它,因爲它可以在沒有任何通知的情況下通過新版本進行更改。