hashMap扩容和转红黑树条件

HashMap的几个参数

参数 解释
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 数组默认长度,也就是16
static final int MAXIMUM_CAPACITY = 1 << 30; 数组最大容量
static final float DEFAULT_LOAD_FACTOR = 0.75f; 扩容条件是容量达到75%
static final int TREEIFY_THRESHOLD = 8; 容量小于8的时候默认使用链表存储,大于8用树
static final int UNTREEIFY_THRESHOLD = 6; 如果因为删除或者扩容,树里面的容量小于6个就换成链表
static final int MIN_TREEIFY_CAPACITY = 64; 链表转红黑树的前提除了链表容量大于8还有集合总容量大于64.

hashmap 默认使用的数组+链表,默认的初始容量是16个格子的数组。当总容量超过75%的时候数组容量倍增。

hash冲突的时候hash值相同的元素放在同一个数组下表的链表里面。查询的时候先hash确定下标位置,然后比对equal方法。使用红黑树是jdk8开始的。之前只用链表。
如果链表容量大于8,或切换数据结构为红黑树。链表的查询效率是O(n),红黑树是O(logn),容量多的时候使用红黑树性能更佳。

红黑树是一种接近平衡的二叉树,它有良好的查询性能。

posted on 2025-04-19 21:06  zhangyukun  阅读(75)  评论(0)    收藏  举报

导航