【发布时间】:2025-12-03 15:35:01
【问题描述】:
HashMap 包含一个哈希表,它是一个保存值的数组
据我所知,哈希表有一个初始大小,但在多次调用 put() 后它会增加(取决于负载因子)
无论如何,我想知道在更改哈希表的大小后如何找到值,因为我知道为了计算特定键的 has 代码,您可以使用表的大小
例如键*prime%size
那么它是如何工作的呢?
【问题讨论】:
标签: java hash implementation hashmap
HashMap 包含一个哈希表,它是一个保存值的数组
据我所知,哈希表有一个初始大小,但在多次调用 put() 后它会增加(取决于负载因子)
无论如何,我想知道在更改哈希表的大小后如何找到值,因为我知道为了计算特定键的 has 代码,您可以使用表的大小
例如键*prime%size
那么它是如何工作的呢?
【问题讨论】:
标签: java hash implementation hashmap
因为密钥通常用于定位您的值所在的 bin。重新分配不会影响这一点,因为所有对象都会根据新的大小重新分配到新的 bin。
【讨论】:
如果您查看addEntry(..) 方法的代码,您会看到:
if (size++ >= threshold)
resize(2 * table.length);
在调整大小时,会调用transfer(..) 方法,该方法:
将所有条目从当前表转移到新表。
【讨论】: