Java 使用默认值创建ConcurrentHashMap

Java 使用默认值创建ConcurrentHashMap,java,collections,Java,Collections,我在下面创建了一个应用程序。它创建了大小为16的段数组 ConcurrentHashMap<Integer, Integer> c= new ConcurrentHashMap<>(); Segment是CHM中的Static内部类,位于jdk7和jdk8中,如下所示 static final class Segment<K,V> extends ReentrantLock implements Serializable 静态最终类段扩展Reentrant

我在下面创建了一个应用程序。它创建了大小为
16
数组

ConcurrentHashMap<Integer, Integer> c= new ConcurrentHashMap<>();
Segment
CHM
中的
Static
内部类,位于
jdk7
jdk8
中,如下所示

static final class Segment<K,V> extends ReentrantLock implements Serializable
静态最终类段扩展ReentrantLock实现可序列化

初始容量和并发级别为16,负载系数为0.75。Java 11实现使用初始容量和并发级别中的最高值作为初始容量,在本例中为16,然后除以负载系数得到21.333。。。然后四舍五入到最接近的2次方得到32。

你指的是什么
Segment
数组?@JacobG.,当你创建一个CHM时得到的段数组
Segment
的唯一参考是在源代码文档中:
我们还声明了一个未使用的“Segment”仅在序列化时才以最小形式实例化的类。
-这就是您所指的吗?@JacobG。请仔细查看CHM的源代码,它有一个名为Segment的静态内部类。我已经有了;我运行的是Java14,因此源代码可能与您使用的版本中包含的不同。Java 14中的
类的文档说明:
先前版本中使用的helper类的精简版本,为实现序列化兼容性而声明。
,并且它不包含任何数组。初始容量是整个CHM中的键值对总数?我们如何计算特定段中HashEntry[]的大小?初始容量只是,当向映射添加项目时,它可能会根据一个相当复杂的算法调整大小并增加容量。JavaDoc提供了一些关于它如何工作的解释。
static final class Segment<K,V> extends ReentrantLock implements Serializable