IdentityHashMap的默认大小不正确?为什么

时间:2018-08-15 09:22:53

标签: java hashmap

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。

请帮助我了解此行为。我在这里想念东西吗?

1 个答案:

答案 0 :(得分:4)

如果查看IdentityHashMap的实现,则会发现它在数组字段table中存储了键-值映射。每个映射消耗该数组中的2个元素,一个用于键,一个用于值。因此,长度为64的数组最多可容纳32个映射。但是,由于IdentityHashMap的默认加载因子为2/3,您可以获得21个映射。