当标签的初始容量(即16)填充时,如何计算新容量?什么是公式



当标签的初始容量(即16)填充时,如何计算新容量?公式是什么?

例如:随着阵列列表的大小通过公式增加新容量=(当前容量 * 3/2) 1

对于向量,它是新容量=(当前容量 * 2)

达到负载因子(0.75)HashSet的容量为doubled

如文档所述:

负载因子是允许hash表的完整量的量度 在自动增加其容量之前获得。当数量 哈希表中的条目超过了负载因子的乘积,并且 当前容量,哈希表被重新进行(即内部 重建数据结构),使哈希表具有大约 两次桶数。

示例:

HashSet的初始容量是16。当达到负载因子(0.75)时,即16 * 0.75 = 12;在插入12th元素时,容量为doubled,即变为32

作为Hashset使用Hashmap在内部使用Hashmap,因此每次放置时都会检查输入数组的阈值,默认情况下是

static final int ALTERNATIVE_HASHING_THRESHOLD_DEFAULT = Integer.MAX_VALUE;

,它在负载系数上进行调整

int capacity = roundUpToPowerOf2(toSize);
threshold = (int) Math.min(capacity * loadFactor, MAXIMUM_CAPACITY + 1);
table = new Entry[capacity];

Hashset使用哈希姆普实现,其中所有hashmap点的所有值都符合单个对象和hashmap的键包含哈希集值。

最初的容量= 16,负载因子= 0.75,阈值= 75% 容量

这意味着每当将新值添加到标签中时,它的大小就会针对阈值进行检查,如果大小超过阈值,则可以调整大小。调整大小使表尺寸的当前尺寸的双。因此,容量加倍,阈值设置为新容量的75%。

每当主题设置的大小等同或超过其容量的75%时,调整大小。

HashSetHashMap支持。根据GrepCode的说法,每次需要增加大小。这是addEntry方法的代码,它是称为实际在表中添加新条目的内部方法。

 void addEntry(int hash, K key, V value, int bucketIndex) {
     Entry<K,V> e = table[bucketIndex];
     table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
     if (size++ >= threshold)
         resize(2 * table.length);
 }

请注意,这是一个实现细节,可以随时更改。

还要注意,如果您不需要的信息不在Javadoc(即实施细节)时,查看源应该始终是您的第一个资源。

相关内容

最新更新