目录
看了不少大佬写的文章,在这里简要总结一下HashMap底层的原理:
什么是红黑树?红黑树的特点:
HashMap的定义中有几个重要的属性
看了不少大佬写的文章,在这里简要总结一下HashMap底层的原理:
jdk1.8之前:HashMap通过数组+链表实现
jdk1.8开始:HashMap通过数组+链表+红黑树实现
什么是红黑树?
红黑树的特点:
1、根节点和叶子节点为黑色
2、每个节点要么是红色,要么是黑色
3、从任意节点到其可达的叶子结点上的黑色节点数量相等
4、红色节点都是由黑色节点分隔开来的,不存在两个红色节点连在一起的情况
HashMap的定义中的几个重要的变量
1、初始容量:内部数组(哈希桶)的默认长度,默认为16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
2、哈希桶的最大容量:内部数组(哈希桶)的最大长度2^30
static final int MAXIMUM_CAPACITY = 1 << 30;
3、默认加载因子:数组长度达到总长度的0.75时自动扩容,第1次扩容为数组长度为16*0.75=12时
static final float DEFAULT_LOAD_FACTOR = 0.75f;
4、树化的最小数组长度:当哈希桶长度达到64,并且链表长度达到8时自动转为红黑树
static final int MIN_TREEIFY_CAPACITY = 64;
5、树化的阈值:当哈希桶的链表长度达到8时自动转为红黑树
static final int TREEIFY_THRESHOLD = 8;
6、红黑树退化为链表的阈值:当红黑树的节点减少到6时会自动转回链表
static final int UNTREEIFY_THRESHOLD = 6;