您是否应该定义HashMap的初始容量和加载因子,如果事先知道元素的数量?

时间:2017-01-06 21:46:22

标签: java hashmap

如果您有一个HashMap,并且知道它将保留的最大元素数量(最多;对于example,因为您使用枚举作为键,HashMap<EnumType, Integer> countPerEnumType;和您因此知道最大可能的元素数量为EnumType.values().length),您是否指定该HashMap的初始容量和加载因子?为什么(不是)?

如果愿意,我认为负载系数可能是1? (安全吗?或有不良副作用?)

初始容量是lengthlength/loadFactor还是(length/loadFactor) + 1(即,当HashMap已满时,或者当它已满并且下一个元素即将展开时,它是否会展开插入?

您如何设置哈希映射以防止调整大小并浪费空桶的内存?

编辑:该示例使用枚举,Lew Bloch suggested使用EnumMap(我更改了问题) - 但假设密钥不是枚举,但您仍然知道其数量你提前得到的元素?

2 个答案:

答案 0 :(得分:5)

使用EnumMap代替,这是专为枚举键设计的高性能Map<EnumType, Integer> counts = new EnumMap<>();

return $this->Misc->printr($test);

答案 1 :(得分:0)

我的理解是,如果放置将导致地图的大小超过初始容量乘以载荷因子,HashMap将在放置操作期间调整大小。

如果声明HashMap的初始容量等于您希望插入的元素数量,并且加载因子为1,那么将填充所有存储桶,并且不会浪费任何存储桶。