我事先不知道我的Hashmap
. 那么我的容量应该有多大HashMap
呢?我应该在这里考虑哪些因素?我想尽可能减少重新散列的过程,因为它真的很昂贵。
问问题
952 次
2 回答
5
您希望在空间需求和速度之间取得良好的折衷(如果发生许多冲突,速度会降低,如果减少空间分配,则更有可能)。
您可以定义负载因子,默认值可能很好。
但是您还想避免的是随着哈希表的增长而不得不重建和扩展哈希表。因此,您希望预先设置最大容量。不幸的是,为此,您需要大致知道要投入多少资金。
如果你能负担得起浪费一点内存,并且至少有一个合理的上限来控制它的大小,那么你可以将它用作初始容量。如果您保持在该容量以下,它将永远不会重新散列。内存需求与容量成线性关系(也许有人有数字)。请记住,在默认加载因子为 0.75 的情况下,您需要将容量设置为略高于元素数量,因为它会在表格已满 75% 时扩展表格。
如果您真的不知道,请使用默认值。不是因为它们在您的情况下是完美的,而是因为您没有任何替代设置的基础。
好消息是,即使您设置了次优值,它仍然可以正常工作,只是浪费一点内存和/或 CPU 周期。
于 2012-09-10T09:27:38.370 回答
0
该文档提供了您做出合理决定所需的最少必要信息。阅读介绍。我不知道你应该考虑的因素,因为你没有详细说明你的应用程序的性质,预期的负载,......我在这个阶段最好的建议,让它保持默认值 16,然后做一个负载测试(从用户的角度考虑应用程序),您将能够大致计算出您最初需要多少容量。
于 2012-09-10T09:32:35.687 回答