当hashmap达到允许的大小(capacity * loadFactor)时,它会自动增加,之后所有元素都将重新定位到新的索引中。那么,为什么需要执行此重定位?
答案 0 :(得分:1)
因为它使哈希表稀疏,允许元素放在自己的桶中而不是堆积在少量桶中。
当多个元素到达同一个桶时,HashMap
必须创建一个列表(有时甚至是树),这对内存占用和元素检索的性能都有害。因此,为了防止此类冲突的数量,HashMap
正在增加其内部哈希表并重新进行。
答案 1 :(得分:0)
rehashing
是必需的,因为将key
值映射到存储区时使用的计算取决于存储区的总数。当桶的数量发生变化(增加容量)时,新的映射计算可能会将给定的key
映射到不同的桶。
换句话说,对部分或全部先前条目的查找可能无法正常运行,因为在增长后备存储之后条目位于错误的存储区中。
虽然这看起来很不幸,但实际上您希望映射功能考虑到可用的桶总数。通过这种方式,可以使用所有存储桶,并且不会将任何条目映射到不存在的存储桶。
还有其他数据结构没有此属性,但这是哈希映射的标准方式。