HashMap是java.util下面的
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
从源码可以看出,它是继承了AbstractMap,实现了Map接口
首先它定义了3个被final修饰的静态常量
static final int DEFAULT_INITIAL_CAPACITY = 16; //默认初始化容量为16,必须为2的幂 static final int MAXIMUM_CAPACITY = 1 << 30; //定义了最大的容量 static final float DEFAULT_LOAD_FACTOR = 0.75f; //默认加载因子为0.75
接下来定义了一些变量
transient Entry[] table; //大小可被调整的表,长素必须是2的幂 transient int size; //包含map中键值对映射的数量。 int threshold; //要调整大小的下一个大小值(容量*负载因子)==阈值 final float loadFactor; //加载因子 transient volatile int modCount;
HashMap:
public HashMap(int initialCapacity, float loadFactor) { //初始容量不能 <0,否则抛出IllegalArgumentException异常 if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity); //初始容量不能 > 0, 否则初始容量被置为最大容量2^30; if (initialCapacity > MAXIMUM_CAPACITY) initialCapacity = MAXIMUM_CAPACITY; //加载因子不能 <= 0,或者loadFactor不是float,抛异常 if (loadFactor <= 0 || Float.isNaN(loadFactor)) throw new IllegalArgumentException("Illegal load factor: " + loadFactor); // Find a power of 2 >= initialCapacity int capacity = 1; //直到找到一个容量 >= 初始容量的值,capacity为2的幂 while (capacity < initialCapacity) capacity <<= 1; this.loadFactor = loadFactor; threshold = (int)(capacity * loadFactor); table = new Entry[capacity]; init(); }
。。。