首页 新闻 会员 周边

java hashMap的顺序问题

0
[已解决问题] 解决于 2019-02-27 10:34

今天看到一篇博客,上面写道:hashMap不保证映射的顺序,特别是它不保证该顺序恒久不变,不保证映射顺序倒是可以理解,因为hashMap是根据key的hashCode方法计算hash值,从而得到具体hash桶的位置,顺序具有不确定性,但是对于—>特别是它不保证该顺序恒久不变—>这句话产生了疑问,假设hashMap中的key保持不变,计算出的hash值也应是始终是相同的值,为什么无法保持顺序会恒久不变呢?希望大神帮忙解疑

不懂java的小白的主页 不懂java的小白 | 菜鸟二级 | 园豆:208
提问于:2019-02-26 11:34
< >
分享
最佳答案
0

在下认为,HashMap在初始化的容量是一定的,当插入的元素多起来的时候,元素很容易发生hash值碰撞,每次碰撞都会遍历链表,导致插入和读取效率低下。而这个时候,HashMap需要自己扩容,所以需要重新计算所有元素的Hash值,重新分配hash桶。

另外还有一种情况就是HashMap内部分布的不均匀,很多桶里没有元素,而有的桶元素很多,同样导致增加碰撞的几率。这个时候HashMap应该也有一个重新分配hash的机制。

所以顺序不应该是恒久不变的。

奖励园豆:5
Shendu.CC | 老鸟四级 |园豆:2138 | 2019-02-26 12:25

了解了

不懂java的小白 | 园豆:208 (菜鸟二级) | 2019-02-26 13:57
其他回答(1)
0

扩容了呗,虽然key的hash值保持不变,但是映射到hashmap中的位置可能就发生变化了。

让我发会呆 | 园豆:2929 (老鸟四级) | 2019-02-26 14:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册