希望您能有耐心看完,一步步来,一行行看,边看边实操,应该是可以弄懂的
文章目录
jdk1.7 hashmap(围绕put)
hashmap在jdk1.7当中,是以数组+链表的形式
来看一段hashmap的代码
HashMap<String,String> hashmap = new HashMap<>();
hashmap.put("key","value");
按住ctrl+鼠标点击前一个HashMap,会看到一些全局变量。先不去记,等等用到的时候再去研究。
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable{
//默认初始容量16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
//默认最大容量
static final int MAXIMUM_CAPACITY = 1 << 30;
//默认扩容因子
static final float DEFAULT_LOAD_FACTOR = 0.75f;
//定义空的Entry数组
static final Entry<?,?>[] EMPTY_TABLE = {
};
//初始化table为空数组
transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;
//实际存储key-value对的个数
transient int size;
//阈值(容量*扩容因子)
int threshold;
//扩容因子
final float loadFactor;
transient int modCount;
//默认阈值为Integer.MAX_VALUE
static final int ALTERNATIVE_HASHING_THRESHOLD_DEFAULT = Integer.MAX_VALUE;
我们按住ctrl+鼠标点击后一个HashMap,就会找到对应的构造方法。如下
public HashMap() {
//这两个参数就是,其实看看字面意思也很好懂
//前一个是 默认初始容量
//后一个是 默认负载因子(其实就是默认扩容因子)
this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR);
}
去找这个this表示的构造方法
//通过初始容量和扩容因子构造HashMap
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