如果您有一个HashMap
,并且知道它将保留的最大元素数量(最多;对于example,因为您使用枚举作为键,HashMap<EnumType, Integer> countPerEnumType;
和您因此知道最大可能的元素数量为EnumType.values().length
),您是否指定该HashMap的初始容量和加载因子?为什么(不是)?
如果愿意,我认为负载系数可能是1
? (安全吗?或有不良副作用?)
初始容量是length
,length/loadFactor
还是(length/loadFactor) + 1
(即,当HashMap已满时,或者当它已满并且下一个元素即将展开时,它是否会展开插入?
您如何设置哈希映射以防止调整大小并浪费空桶的内存?
编辑:该示例使用枚举,Lew Bloch suggested使用EnumMap(我更改了问题) - 但假设密钥不是枚举,但您仍然知道其数量你提前得到的元素?
答案 0 :(得分:5)
使用EnumMap
代替,这是专为枚举键设计的高性能Map<EnumType, Integer> counts = new EnumMap<>();
:
return $this->Misc->printr($test);
答案 1 :(得分:0)
我的理解是,如果放置将导致地图的大小超过初始容量乘以载荷因子,HashMap将在放置操作期间调整大小。
如果声明HashMap的初始容量等于您希望插入的元素数量,并且加载因子为1,那么将填充所有存储桶,并且不会浪费任何存储桶。