今天看到一篇博客,上面写道:hashMap不保证映射的顺序,特别是它不保证该顺序恒久不变,不保证映射顺序倒是可以理解,因为hashMap是根据key的hashCode方法计算hash值,从而得到具体hash桶的位置,顺序具有不确定性,但是对于—>特别是它不保证该顺序恒久不变—>这句话产生了疑问,假设hashMap中的key保持不变,计算出的hash值也应是始终是相同的值,为什么无法保持顺序会恒久不变呢?希望大神帮忙解疑
在下认为,HashMap在初始化的容量是一定的,当插入的元素多起来的时候,元素很容易发生hash值碰撞,每次碰撞都会遍历链表,导致插入和读取效率低下。而这个时候,HashMap需要自己扩容,所以需要重新计算所有元素的Hash值,重新分配hash桶。
另外还有一种情况就是HashMap内部分布的不均匀,很多桶里没有元素,而有的桶元素很多,同样导致增加碰撞的几率。这个时候HashMap应该也有一个重新分配hash的机制。
所以顺序不应该是恒久不变的。
了解了
扩容了呗,虽然key的hash值保持不变,但是映射到hashmap中的位置可能就发生变化了。