java - 我的 HashMap 应该有多大?

标签 java data-structures hashtable

我事先不知道我的 Hashmap 中要存储多少元素。那么我的HashMap容量 应该有多大呢?我应该在这里考虑哪些因素?我想尽可能地减少重新散列过程,因为它非常昂贵。

最佳答案

您希望在空间需求和速度之间取得良好的权衡(如果发生许多碰撞,速度会降低,如果您减少空间分配,速度会更有可能)。

您可以定义一个加载因子,默认值可能没问题。

但是您还希望避免随着哈希表的增长而不得不重建和扩展哈希表。所以你想预先用最大容量来调整它的大小。不幸的是,为此,您需要大致知道要投入多少。

如果您可以承受浪费一点内存,并且至少有一个合理的内存上限,您可以将其用作初始容量。如果您低于该容量,它将永远不会重新散列。内存需求与容量成线性关系(也许有人有数字)。 请记住,在默认加载系数为 0.75 的情况下,您需要将容量设置为略高于元素数量,因为它会在表格已满 75% 时扩展表格。。 p>

如果您真的不知道,只需使用默认值即可。不是因为它们在您的情况下是完美的,而是因为您没有任何替代设置的基础。

好消息是,即使您设置了次优值,它仍然可以正常工作,只是浪费了一点内存和/或 CPU 周期。

关于java - 我的 HashMap 应该有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12348741/

相关文章:

Java哈希表

c - 无限循环/段错误

java - 将类放入哈希表中

python - 包含形状和它们之间的空间关系的正确数据结构

java - Apache Camel 每天安排多次

java - Selenium Webdriver 中的 Junit 标记不起作用

java - 我应该如何使用 USB 调试来调试图像捕获 Intent

algorithm - 基本的飞行旅行计划

c# - 从字节数组读取 C# 中的 C/C++ 数据结构

java - WEKA:如何禁用标记数据的过滤器?