为什么HashMap的负载因子设置成0.75,而不是1也不是0.5?这背后到底有什么考虑?
在HashMap源码中 HashMap默认容量大小是16,最大容量是2的30次方,默认的负载因子是0.75f;
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
static final int MAXIMUM_CAPACITY = 1 << 30;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
1. 什么是负载因子?
负载因子(loadFactor)表示HashMap满的程度,默认值为0.75f,也就是说默认情况下,当HashMap中元素个数达到了容量的3/4的时候就会进行自动扩容。
第一次创建HashMap的时候,就会指定其容量(如果未明确指定,默认是16)。随着我们不断的向HashMap中put元素的时候,就有可能会超过一定的阈值,那么就需要有一个扩容机制。所谓扩容,就是扩大HashMap的容量(JDK1.8):
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
Node<K,V>[] tab; Node<K,V> p; int n, i;
if ((tab = table) == null || (n = tab.length) &