以下是 hashmap 的内部结构以及它的大小如何作为插入的一部分进行更改:
java.util.HashMap.java
/**
* The default initial capacity - MUST be a power of two.
*/
static final int DEFAULT_INITIAL_CAPACITY = 16;
/**
* The load factor used when none specified in constructor.
*/
static final float DEFAULT_LOAD_FACTOR = 0.75f;
它说数组的默认大小为 16,加载因子意味着每当哈希图的大小达到其当前大小的 75% 时,即 12,它将通过重新计算现有数据结构元素的哈希码使其大小翻倍。
java.util.HashMap.java
/**
* The maximum capacity, used if a higher value is implicitly specified
* by either of the constructors with arguments.
* MUST be a power of two <= 1<<30.
*/
static final int MAXIMUM_CAPACITY = 1 << 30;
它表示 hashmap 可以扩展的最大大小,即直到 2^(30) = 1,073,741,824
因此,为了避免在元素增长时重新散列数据结构,最好在创建散列图时明确给出散列图的大小。