我的应用程序在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. Prototype 1.6和jQuery 1.4.2之间的区别
- 3. HFP 1.7和HFP 1.6之间的区别?
- 4. HashMap与字典之间的区别ADT
- 5. 使用新的jQuery 1.6 $ .animate“promise”和回调之间的区别?
- 6. Java 1.6和1.7 jarsigner之间的区别是什么
- 7. java中的Array和Hashmap之间的主要区别是什么?
- 8. JDK 1.4和JDK1.6之间有什么区别
- 9. '+ ='和'= +'之间的区别?
- 10. {!!之间的区别!!}和{{}}
- 11. ==和case之间的区别?
- 12. '#','%'和'$'之间的区别
- 13. | =和^ = css之间的区别
- 14. “%〜dp0”和“。\”之间的区别?
- 15. .eq之间的区别。和==
- 16. ==和.equals()之间的区别?
- 17. `%in%`和`==`之间的区别
- 18. rdd.collect().toMap和rdd.collectAsMap()之间的区别?
- 19. 地图和字典之间的区别
- 20. setValue()和updateChildren()之间的区别?
- 21. SPFile和PublishingPage类别之间的区别
- 22. System.Timers.Timer Enabled = true和.Start()之间的区别Enabled = true和.Start()之间的区别
- 23. NSthread和NStimer和NSNotifcation之间的区别?
- 24. Java和C#和.NET之间的区别
- 25. sys.log()和console.log()和console.error()之间的区别?
- 26. $ .ajax()和$ .get()和$ .load()之间的区别
- 27. Object的LinkedList和HashMap的LinkedList的区别?
- 28. javascript中的/ * * /和//之间的区别
- 29. python中的[]和[,,]之间的区别
- 30. QWidget的setStyleSheet和QApplication之间的区别
我同意订单取决于对象的哈希码,这就是它在每次运行时总是用于旧版和新版的相同订单的原因。我不明白的是,在任何版本的每次运行中订单都得到了更改?我总是习惯于每次运行都得到相同的订单。 – Delta 2012-04-25 16:19:49
或者由于密钥的哈希码是由对象的字符串字段之一计算的,因此可以看到此行为? – Delta 2012-04-25 16:22:35
我的意思是,如果你的键使用默认的'Object.hashCode()',那么顺序可以在不同的运行中变化。这些值最终基于内存地址,因此在运行之间会发生变化。 – 2012-04-25 16:55:23