HashMap2

HashMap 源码重识

⭐ HashMap 重要的变量

// 默认的初始容量
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

// 最大的容量,且必须是2的倍数 
static final int MAXIMUM_CAPACITY = 1 << 30;

// 默认的负载因子
static final float DEFAULT_LOAD_FACTOR = 0.75f;

//链表转成红黑树的默认值
static final int TREEIFY_THRESHOLD = 8;

//反向转换回链表的最大值
static final int UNTREEIFY_THRESHOLD = 6;

//可将其分类为树木的最小桌子容量。(否则,如果bin中的节点过多,则将调整表的大小。) 
//至少应为4 * TREEIFY_THRESHOLD,以避免冲突在调整大小和树化阈值之间。
static final int MIN_TREEIFY_CAPACITY = 64;

//该表在首次使用时初始化,并根据需要调整大小。 分配时,长度始终是2的幂。 (在某些操作中,我们还允许长度为零,以允许使用当前不需要的引导机制。)
transient Node<K,V>[] table;

// map 内元素的size
transient int size;

⭐ 构造方法

  • 注:

    如果我们传入参数为 new HashMap(10); this.threshold = tableSizeFor(initialCapacity);为16

    当你new HashMap(17); this.threshold = tableSizeFor(initialCapacity);为32

⭐ Put 方法

Map<String,String> map = new HashMap<>(17);

⭐ resize()方法

⭐ treeifyBin()方法


⭐ Get方法

⭐ getTreeNode

Last updated

Was this helpful?