【发布时间】:2015-01-11 12:40:11
【问题描述】:
Java doc says - 当哈希表中的条目数超过负载因子和当前容量的乘积时,哈希表被重新哈希
在下面的程序中-
HashMap<Integer, String> map = new HashMap<Integer, String>();
int i = 1;
while(i<16) {
map.put(i, new Integer(i).toString());
i++;
}
Key是Integer类型,插入第13到15个元素HashMap容量保持为16,阈值保持为12,为什么?
在地图中添加第 13 个元素后调试屏幕截图 -
args String[0] (id=16)
map HashMap<K,V> (id=19)
entrySet null
hashSeed 0
KeySet null
loadFactor 0.75
modCount 13
size 13
table HashMap$Entry<K,V>[16] (id=25)
threshold 12
values null
i 14
[null, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 9=9, 10=10, 11=11, 12=12, 13=13, null, null]
具有 String 类型键的 HashMap - HashMap<String, String> 或自定义类 - Map<Employee,Integer> 在第 13 次插入时显示预期行为
【问题讨论】:
-
阅读代码。这将解释它。实现中可能发生了一些变化,这意味着 javadoc 不再完全正确。但这并不有趣(IMO),因为任何明智的程序员都不会依赖 hashmap 调整大小的精确行为。
-
只是试图找出为什么将键作为整数的实现行为不同。如果我尝试 HashMap
它会在第 13 次插入时调整地图大小 -
哪个 Java 版本(包括更新)?
-
@m3th0dman java 版本 - 1.7.0_67-b01
标签: java hashmap threshold load-factor