我对添加新的键值对时重新构建HashMaps
有几个问题。我将基于以下事实提出问题(它们适用于Oracle JVM,不确定其他JVM是否正确):
- 每次当你将HashMap扩大到大于阈值(阈值=loadFactor*numberOfEntries)时,Resize会重新构建
HashMap
,使其具有更大的内部表数组大小。无论新创建的Entry放在哪个存储桶中 - Map仍然会变得更大。即使所有条目都进入一个桶中(即它们的键的hashCode()
返回相同的编号)。 HashMap
删除数据后不会缩小。即使从HashMap
中删除了所有键,它的内部表大小也不会改变。
现在是问题:
- 这些事实是否正确?
如果是这样的话:
- 为什么要实现这种方式的缩放?增加内部表的大小即使明显不必要是有意图的吗?还是一个错误?
- 为什么不会缩小?