我的應用程序在1.4
和1.6
上運行。元素順序正在打印1.6
版本不同於1.4
。我用LinkedHashMap
修復了這個問題。現在這個順序和1.4
完全一樣。除了下載整個jdk,我沒有找到1.4
的源代碼HashMap
。除了新版本中的通用改變?hashmap 1.4和1.6之間的區別
3
A
回答
4
從未保證HashMap
中元素的迭代順序,因此實現可以自由更改。這個缺點已由LinkedHashMap
糾正。
這樣的變化可能是由例如complete revamping of the hashing algorithm in Java 1.4.1 ...但是再一次,我們在將項目遷移到Java6時也注意到了這種變化,因此該版本也發生了變化。
2
HashMap
中的迭代順序是undefined。這意味着它可以(並且一直)改變。它不僅取決於代碼,而且取決於對象散列碼的值,它們本身不僅可以在版本之間有所不同,甚至可以從運行到運行。
LinkedHashMap
具體作爲HashMap
替代具有可預測的迭代次序。
0
我想HashMap的實現已經改變了。 HashMap不保證任何順序,所以你不應該依賴它,因爲它可以在沒有任何通知的情況下通過新版本進行更改。
相關問題
- 1. jdk 1.6和jdk 1.7之間的區別?
- 2. HFP 1.7和HFP 1.6之間的區別?
- 3. Prototype 1.6和jQuery 1.4.2之間的區別
- 4. hashmap和hashtable |之間的區別
- 5. HashMap與字典之間的區別ADT
- 6. 使用新的jQuery 1.6 $ .animate「promise」和回調之間的區別?
- 7. Java 1.6和1.7 jarsigner之間的區別是什麼
- 8. java中的Array和Hashmap之間的主要區別是什麼?
- 9. HashMap <String,String>和List <NameValuePair之間的區別
- 10. JDK 1.4和JDK1.6之間有什麼區別
- 11. 之間的〜/和的區別../
- 12. '#','%'和'$'之間的區別
- 13. {!!之間的區別!!}和{{}}
- 14. '+ ='和'= +'之間的區別?
- 15. 「。+」和「。+?」之間的區別
- 16. .eq之間的區別。和==
- 17. #。/和#之間的區別。 ./
- 18. !=和!之間的區別==
- 19. 「%〜dp0」和「。\」之間的區別?
- 20. | =和^ = css之間的區別
- 21. 之間的區別。和#
- 22. ==和case之間的區別?
- 23. 「**/* /」和「** /」之間的區別?
- 24. jQuery - '。'之間的區別和「#」
- 25. 「?1」和「?」之間的區別
- 26. `%in%`和`==`之間的區別
- 27. fmod和%之間的區別
- 28. 之間的區別:+和:+
- 29. 地圖和字典之間的區別
- 30. rdd.collect().toMap和rdd.collectAsMap()之間的區別?
我同意訂單取決於對象的哈希碼,這就是它在每次運行時總是用於舊版和新版的相同訂單的原因。我不明白的是,在任何版本的每次運行中訂單都得到了更改?我總是習慣於每次運行都得到相同的訂單。 – Delta 2012-04-25 16:19:49
或者由於密鑰的哈希碼是由對象的字符串字段之一計算的,因此可以看到此行爲? – Delta 2012-04-25 16:22:35
我的意思是,如果你的鍵使用默認的'Object.hashCode()',那麼順序可以在不同的運行中變化。這些值最終基於內存地址,因此在運行之間會發生變化。 – 2012-04-25 16:55:23