gpt4 book ai didi

java - 为什么使用字段 `threshold` 来保存初始容量,而不是像 `initialCapacity` 这样更清晰的附加字段?

转载 作者:太空宇宙 更新时间:2023-11-04 09:42:32 26 4
gpt4 key购买 nike

HashMap的构造函数

/**
* Constructs an empty <tt>HashMap</tt> with the specified initial
* capacity and load factor.
*
* @param initialCapacity the initial capacity
* @param loadFactor the load factor
* @throws IllegalArgumentException if the initial capacity is negative
* or the load factor is nonpositive
*/
public HashMap(int initialCapacity, float loadFactor) {
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: " +
initialCapacity);
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY;
if (loadFactor <= 0 || Float.isNaN(loadFactor))
throw new IllegalArgumentException("Illegal load factor: " +
loadFactor);
this.loadFactor = loadFactor;
this.threshold = tableSizeFor(initialCapacity); // here, threadshold is actually initial capacity
}

阅读代码时我有点困惑。我的问题是,为什么使用字段 threshold 来保存初始容量,而不是像 initialCapacity 这样更清晰的附加字段?

<小时/>

编辑:我没有注意到构造函数接受参数 initialCapacity,我认为构造函数参数 initialCapacity 应该是 specifiedInitialCapacity

最佳答案

因为HashMap会多次增长,并且阈值是一个动态值。它在 map 的生命周期中发生变化,并且每当调整 map 大小时都会进行调整。

阈值的 Javadoc (1.8 openjdk):

/**
* The next size value at which to resize (capacity * load factor).
*
* @serial
*/
// (The javadoc description is true upon serialization.
// Additionally, if the table array has not been allocated, this
// field holds the initial array capacity, or zero signifying
// DEFAULT_INITIAL_CAPACITY.)
int threshold;

由于 map 可以调整大小,因此初始容量就是这样,阈值只是初始相同。

关于java - 为什么使用字段 `threshold` 来保存初始容量,而不是像 `initialCapacity` 这样更清晰的附加字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55807120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com