Java哈希表加载因子

Java哈希表加载因子,java,data-structures,Java,Data Structures,Java哈希表有一个构造函数,您可以在其中指定loadFactor。但是,如果初始容量(n)已知,那么指定loadFactor有什么意义 假设其bucket数组的大小是恒定的,构造函数是否会使用Hashtable(int initialCapacity,float loadFactor) 只需创建一个容量大于initialCapacity的哈希表,以确保正确的加载因子?,因为它只是初始容量。HashMap是一个动态结构;您可以超过loadfactor用于的初始容量,以便知道何时扩展 (如果你想说

Java哈希表有一个构造函数,您可以在其中指定loadFactor。但是,如果初始容量(n)已知,那么指定loadFactor有什么意义

假设其bucket数组的大小是恒定的,构造函数是否会使用Hashtable(int initialCapacity,float loadFactor) 只需创建一个容量大于initialCapacity的哈希表,以确保正确的加载因子?

,因为它只是初始容量。
HashMap
是一个动态结构;您可以超过loadfactor用于的初始容量,以便知道何时扩展

(如果你想说你知道你永远不会超过初始容量,那么数据结构无法预测你的意图;它是一个数据结构,而不是一个透视人工智能;)

假设其存储桶数组的大小为常量,[…]

这种假设是不正确的。必要时调整存储桶数组的大小,以确保非空存储桶的比例最多为
负载系数


(注意:声明“初始容量和负载因子参数只是对实现的提示。关于何时以及是否调用rehash方法的确切细节取决于实现”,因此上述内容不应被视为严格的保证。但这是一般行为。)

如果您确切知道表的大小,然后将载荷系数设为1。该类是为每个人编写的,包括人们可能希望增加数组大小的情况。

负载系数表示何时调整数组大小。更高的负载系数意味着更晚的调整和更多的冲突。我想问题是(为什么我认为这是一个有趣的问题)他们真的只是盲目地使用
initialCapacity
来给出初始大小吗?因为,如果是这样,当添加
initialCapacity
值时,它们将需要调整大小(除非loadFactor为1)。因此,假设
initialCapacity
通常是添加多少值的准确估计值,那么计算初始大小以便添加
initialCapacity
点而无需调整大小是否更有意义?换句话说:初始容量是指初始表大小还是初始容量?@andrewcooke:我明白你的意思,但根据“容量是哈希表中的桶数”(原文为斜体),所以这里没有矛盾——可能只是用词不当。你在回答中还说它们只是提示。然而,在实践中,至少对于gnu类路径,您是正确的-sun类似,但四舍五入到2的幂-