- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
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/
我应该传递什么值来为 N 个项目创建一个基于 HashMap/HashMap 的高效结构? 在 ArrayList 中,有效数字是 N(N 已经假设 future 增长)。 HashMap 的参数应该
当从一个集合构造一个HashSet和一个LinkedHashSet时,initialCapacity在默认实现中被设置为不同的值。 哈希集: public HashSet(Collection c)
HashMap的构造函数 /** * Constructs an empty HashMap with the specified initial * capacity and load fact
java.util.concurrent.ConcurrentHashMap的构造方法之一: public ConcurrentHashMap(int initialCapacity) {
我想知道为什么 LinkedList 没有 initialCapacity。 我知道何时使用 ArrayList 以及何时使用 LinkedList。 定义集合最终大小的良好做法如下: List ar
我使用 PriorityQueue 对某些数据进行部分排序。特别是,这是代码: Collection data = ...; PriorityQueue queue = new PriorityQue
在ArrayList.java中,为什么ArrayList(int initialCapacity)构造函数调用super()? 我知道它正在尝试调用其父类(super class)的默认构造函数,即
我必须从一个数组(在下面的代码中称为 nums)构造一个最大堆,所以我使用 java.util.PriorityQueue。 我的代码是这样的: PriorityQueue pq = new Prio
我正在处理排序 interval存在于 ArrayList 上及其 start属性,完整定义 interval将在示例代码中显示为私有(private)类。 我使用的实现是 MergeSort , 与
我是一名优秀的程序员,十分优秀!