HashMap源码解析

通过阅读HashMap的源码可以获取到下面的信息:

1.HashMap继承自AbstractMap,实现了Map、Cloneable、Serializable接口

HashMap extends AbstractMap implements Map, Cloneable, Serializable

2.HashMap中的常量的含义

    /**
     * 默认初始容量16(2的次方)
     */
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;

    /**
     * 最大容量2的30次方,如果构造函数制定的容量比这个值还大,则使用该值
     */
    static final int MAXIMUM_CAPACITY = 1 << 30;

    /**
     * 默认加载因子0.75
     */
    static final float DEFAULT_LOAD_FACTOR = 0.75f;

    /**
     * 树形结构的阈值,如果每个桶中的个数超过8个,则由链表转成红黑树
     */
    static final int TREEIFY_THRESHOLD = 8;

    /**
     * resize的时候,如果桶内节点的个数小于6,则将树形结构变成链表结构
     */
    static final int UNTREEIFY_THRESHOLD = 6;

    /**
     * 链表转树形结构的最小table数组的长度 . (如果table.length没达到64,则resize)
     */
    static final int MIN_TREEIFY_CAPACITY = 64;

3.成员变量

    /**
     * 存储元素的数组
     */
    transient Node[] table;

    /**
     * 保存缓存的entrySet(),使用AbstractMap字段
     */
    transient Set> entrySet;

    /**
     * map中键值对的总个数
     */
    transient int size;

    /**
     * HashMap中结构发生修改的次数(修改包括map中元素数量的变化或者rehash)
     * rehash即resize扩容的时候,元素的位置要么是在原位置,要么是在原位置再移动2次幂的位置
     * 该字段保证HashMap是快速失败的(fast-fail),抛出异常ConcurrentModificationException
     */
    transient int modCount;

    /**
     * 触发resize的阈值 (capacity * load factor).
     */
    int threshold;

    /**
     * 加载因子
     */
    final float loadFactor;



你可能感兴趣的:(HashMap源码解析)