我事先不知道我的 Hashmap
中要存储多少元素。那么我的HashMap
的容量 应该有多大呢?我应该在这里考虑哪些因素?我想尽可能地减少重新散列过程,因为它非常昂贵。
最佳答案
您希望在空间需求和速度之间取得良好的权衡(如果发生许多碰撞,速度会降低,如果您减少空间分配,速度会更有可能)。
您可以定义一个加载因子,默认值可能没问题。
但是您还希望避免随着哈希表的增长而不得不重建和扩展哈希表。所以你想预先用最大容量来调整它的大小。不幸的是,为此,您需要大致知道要投入多少。
如果您可以承受浪费一点内存,并且至少有一个合理的内存上限,您可以将其用作初始容量。如果您低于该容量,它将永远不会重新散列。内存需求与容量成线性关系(也许有人有数字)。 请记住,在默认加载系数为 0.75 的情况下,您需要将容量设置为略高于元素数量,因为它会在表格已满 75% 时扩展表格。。 p>
如果您真的不知道,只需使用默认值即可。不是因为它们在您的情况下是完美的,而是因为您没有任何替代设置的基础。
好消息是,即使您设置了次优值,它仍然可以正常工作,只是浪费了一点内存和/或 CPU 周期。
关于java - 我的 HashMap 应该有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12348741/