在IdentityHashMap
类的默认构造函数中,将调用私有的init()
方法,该方法将默认大小设为64
。
请在下面找到代码:
private static final int DEFAULT_CAPACITY = 32;
public IdentityHashMap() {
init(DEFAULT_CAPACITY);
}
private void init(int initCapacity) {
table = new Object[2 * initCapacity];
}
但是在文档JDK 8中,根据32个默认容量和负载因子,默认大小为21。
请帮助我了解此行为。我在这里想念东西吗?
答案 0 :(得分:4)
如果查看IdentityHashMap
的实现,则会发现它在数组字段table
中存储了键-值映射。每个映射消耗该数组中的2个元素,一个用于键,一个用于值。因此,长度为64的数组最多可容纳32个映射。但是,由于IdentityHashMap
的默认加载因子为2/3
,您可以获得21个映射。