2012-04-25 73 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不保证任何顺序,所以你不应该依赖它,因为它可以在没有任何通知的情况下通过新版本进行更改。

相关问题