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) 收藏 举报
浙公网安备 33010602011771号