我的应用程序在1.4
和1.6
上运行。在1.6
版本中打印的元素顺序与1.4
不同。我用LinkedHashMap
修复了问题。现在这个顺序与1.4
完全相同。除了下载整个jdk之外,我没有找到1.4
HashMap
的源代码。除了通用版本在新版本中有什么变化吗?
答案 0 :(得分:4)
HashMap
中元素的迭代顺序从未得到保证,因此实现可以自由更改它。这个缺点已由LinkedHashMap
补救。
这种改变可能是由例如complete revamping of the hashing algorithm in Java 1.4.1 ...但是,我们还注意到在将项目迁移到Java6时发生了这样的变化,因此该版本也发生了变化。
答案 1 :(得分:2)
HashMap
中的迭代顺序是 undefined 。这意味着它可以(并且确实)一直在变化。它不仅取决于代码,还取决于对象的哈希码的值,它们本身不仅可以从版本到版本不同,甚至可以从运行到运行。
LinkedHashMap
专门作为具有可预测迭代顺序的HashMap
替代方案而存在。
答案 2 :(得分:0)
我想HashMap的实现已经改变了。 HashMap不保证任何订单,因此您不应该依赖它,因为它可能会在没有任何通知的情况下使用新版本进行更改。