为什么在重新散列时需要HashMap重新定位元素?

时间:2016-06-27 15:09:01

标签: java hashmap

当hashmap达到允许的大小(capacity * loadFactor)时,它会自动增加,之后所有元素都将重新定位到新的索引中。那么,为什么需要执行此重定位?

2 个答案:

答案 0 :(得分:1)

因为它使哈希表稀疏,允许元素放在自己的桶中而不是堆积在少量桶中。

当多个元素到达同一个桶时,HashMap必须创建一个列表(有时甚至是树),这对内存占用和元素检索的性能都有害。因此,为了防止此类冲突的数量,HashMap正在增加其内部哈希表并重新进行。

答案 1 :(得分:0)

rehashing是必需的,因为将key值映射到存储区时使用的计算取决于存储区的总数。当桶的数量发生变化(增加容量)时,新的映射计算可能会将给定的key映射到不同的桶。

换句话说,对部分或全部先前条目的查找可能无法正常运行,因为在增长后备存储之后条目位于错误的存储区中。

虽然这看起来很不幸,但实际上您希望映射功能考虑到可用的桶总数。通过这种方式,可以使用所有存储桶,并且不会将任何条目映射到不存在的存储桶。

还有其他数据结构没有此属性,但这是哈希映射的标准方式。